gpt4 book ai didi

java - 将一个 JSONAray 项目转换为多个项目

转载 作者:行者123 更新时间:2023-11-30 10:37:36 25 4
gpt4 key购买 nike

我有以下字符串,它以列表的形式从数据库返回,我的假设是,列表包含 3 个项目。但它只显示“1”作为大小。因此它将所有 Activity 项目作为一个元素返回。

注意:当我尝试获取列表的第一个索引 (list.get(0)) 时,它只返回一个“Activity ”而不是所有三个(作为单个项目)。我不知道是什么发生在列表中。

我的问题:如何将下面包含 1 个项目(有 3 个 Activity 项目)的字符串列表转换为应该将列表大小视为 3(3 个 Activity )的列表。

[ { "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;

最佳答案

1.) 创建 json通过将字符串传递给构造函数来数组

2.) 遍历数组并检索你的 jsonObject使用索引 i

3.) 获取 activity jsonobject然后简单地使用您的索引来获取 jsonActivityItem 的值对象。

4.) 创建一个 POJO 类来将你的对象存储在一个集合中,比如 List 等,但一定要标记它们 private并使用 getter 和 setter 作为最佳实践

class User{
String id,kind,result;
int userId,accountId;
long timestamp;
//.. getter & setters
}

注意:要将您的字符串转换为 json 兼容,您可以使用 JsonParser , 试试这个链接 JsonParser snippet

    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 类,您可以查看 this link创建兼容的 POJO 类,稍后只需使用 Gson code

无效检查:有时您可能会在值不可用时看到一些异常,因此在这些情况下您不确定值是否存在所以使用 optInt optBoolean等等,如果默认值不存在,它将简单地返回默认值,甚至尝试将值转换为 int如果是 string喜欢

来自 docs

Get an optional int value associated with a key, or the default if there is no such key or if the value is not a number. If the value is a string, an attempt will be made to evaluate it as a number.

int block_id = jObj.getInt("key",defaultvalue);

例如

int block_id = jObj.getInt("userId",0); 

关于java - 将一个 JSONAray 项目转换为多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com