我有以下字符串,这是返回从数据库的形式列表,我的假设是,列表包含3个项目。因此,它将所有活动项作为一个元素返回。
注意:当我尝试获取列表的第一个索引(list.get(0))时,它只返回一个“活动”,而不是全部三个(作为单个项目)。我不知道名单里发生了什么。
我的问题是:如何将包含1项(3个活动项目)的字符串列表转换为列表,该列表应将列表大小视为3(3活动)。
[ { "activity" : { "id" : "a_3" , "kind" : "Infomation" , "userId" : 100 , "accountId" : 0 , "timestamp" : 1476369009366 , "result" : "normal" }} ,
{ "activity" : { "id" : "a_18" , "kind" : "Infomation" , "userId" : 100 , "accountId" : 0 ,"timestamp" : 1476419696003 , "result" : "normal" }} ,
{ "activity" : { "id" : "a_4" , "kind" : "Infomation" , "userId" : 100, "accountId" : 0 , ""timestamp" : 1476435910335 , "result" : "normal" }}]
Iterable<DBObject> results =null;
List<String> retList = new ArrayList<>();
try {
results= collection.aggregate(pipeline).results();
} catch (Exception e) {
}
if(results!=null){
Iterator<DBObject> iterator = results.iterator();
while (iterator.hasNext()) {
String input = iterator.next().get("actLogList").toString();
retList.add(input.substring(input.indexOf("[") + 1, input.lastIndexOf("]")));
}
}
return retList;
您必须使用GSON库来解析这个JSON数组。您需要执行类似于以下代码的操作。
JSONArray jsonArray = new JSONArray(jsonArrayString);
List<String> list = new ArrayList<String>();
for (int i=0; i<jsonArray.length(); i++) {
list.add( jsonArray.getString(i) );
}
1.)通过将字符串传递给构造函数来创建json
数组
2.)遍历数组并使用索引i
3.)获取活动
jsonobject
,然后只需使用索引获取jsonActivityItem
对象的值。
4.)创建一个POJO类,将对象存储在列表等集合中,但确保将它们标记为私有的,并使用getter和setters作为最佳实践
class User{
String id,kind,result;
int userId,accountId;
long timestamp;
//.. getter & setters
}
注意:要将字符串转换为json兼容,可以使用JsonParser
,请尝试此链接JsonParser片段
JSONArray array;
List<User> listUser=new ArrayList<>(); // to store objects as details
try {
array=new JSONArray(st); // st is your string ( make sure to use jsonparser )
JSONObject jsonActivity;
JSONObject jsonActivityItem;
User user;
for (int i=0;i<array.length();i++) {
System.out.println();
jsonActivity=array.getJSONObject(i);
jsonActivityItem=jsonActivity.getJSONObject("activity");
// To store data for later use
user = new User();
user.setId(jsonActivityItem.getString("id"));
user.settimestamp(jsonActivityItem.getLong("timestamp"));
//..set other values using setters
listUser.add(user);
// to display items
String id = jsonActivityItem.optString("id");
String kind = jsonActivityItem.optString("kind");
String userId = jsonActivityItem.optString("userId");
String accountId = jsonActivityItem.optString("accountId");
String timestamp = jsonActivityItem.optString("timestamp");
String result = jsonActivityItem.optString("result");
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我推荐一种简单的方法,即使用gson
将其转换为列表,但您需要使用POJO类。您可以查看此链接以创建兼容的POJO类,稍后只需使用gson代码即可
空值检查:有时,当值不可用时,您可能会看到一些异常,因此在这些情况下,当您不确定是否存在值时,请使用optInt
optBoolean
等,如果不存在,则只返回默认值,如果存在,甚至尝试将值转换为int
string
like
来自文档
获取与某个键关联的可选int值,如果没有此类键或该值不是数字,则获取默认值。如果该值是字符串,将尝试将其作为数字计算。
int block_id = jObj.getInt("key",defaultvalue);
e. g.
int block_id = jObj.getInt("userId",0);
有人知道怎么做吗?显然有一个Windows命令用于这种事情... 谢谢
假设我已将以下对象序列化为json字符串: 现在我想反序列化它,但是我想把名称分成两个字段,和。我该怎么做呢? 我希望最终的结果是类似于: 这对Gson有可能吗?
我正在尝试将单个输入消息转换为多个消息。我有一个带有以下签名的方法: 类类似于: 对于中的每个,我想创建一个的实例。我如何做到这一点并处理
问题内容: 如何将多个PDF文件合并/转换为一个大PDF文件? 我尝试了以下操作,但是目标文件的内容不符合预期: 我需要一个非常简单/基本的命令行(CLI)解决方案。最好的办法是,如果我可以将合并/转换的输出直接传送到管道中(就像我之前在这里提出的问题中最初尝试的那样:Linux管道(convert->pdf2ps-> lp)。 问题答案: 抱歉,我设法使用Google自己找到了答案,还有些运气:
我有以下型号 我试图通过名称和组名称获得一个实例。 我可以用下面的代码来做 但是我想把它变成一个查询。对如何实现这一点有什么想法吗?
我有两个枚举,它们实现了如下相同的接口:- 名为SystemA和SystemB的两个枚举正在实现此接口。 我想要像这样应用getConfigFunction:- 但它会抛出编译时错误,因为形成的流的类型为:Config[]。所以我尝试了以下修改:- 但这也失败了,因为我还需要修改forEach部分。有人能帮忙吗?我该如何修改forEach部分,或者我该如何使用map()/flatmap()函数,这