Java 将一个JSONAray项转换为多个项

Java 将一个JSONAray项转换为多个项,java,arraylist,Java,Arraylist,我有以下字符串,它以列表的形式从数据库返回,我的假设是,列表包含3项。 但它只显示“1”作为大小。因此,它将所有活动项作为一个元素返回 注意:当我尝试获取列表的第一个索引(list.get(0))时,它只返回一个“活动”,而不是全部三个(作为单个项)。我不知道是什么 发生在列表中 我的问题:如何将包含1项(3个活动项目)的字符串下面的列表转换为应考虑列表大小为3(3活动)的列表。 上述信息来自DB: Iterable results=null; List retList=new ArrayLis

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

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

我的问题:如何将包含1项(3个活动项目)的字符串下面的列表转换为应考虑列表大小为3(3活动)的列表。 上述信息来自DB:

Iterable results=null;
List retList=new ArrayList();
试一试{
结果=collection.aggregate(pipeline.results();
}捕获(例外e){
}
如果(结果!=null){
迭代器迭代器=results.Iterator();
while(iterator.hasNext()){
字符串输入=迭代器.next().get(“actLogList”).toString();
add(input.substring(input.indexOf(“[”)+1,input.lastIndexOf(“]));
}
}
返回列表;

您必须使用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) );
    }
JSONArray-JSONArray=新的JSONArray(jsonArrayString);
列表=新的ArrayList();
对于(inti=0;i1),通过将字符串传递给构造函数来创建
json
数组

2.)遍历数组并使用索引
i

3.)获取
活动
jsonobject
,然后只需使用索引获取
jsonActivityItem
对象的值

4.)创建一个POJO类,将对象存储在列表等集合中,但确保将它们标记为私有,并使用getter和setter实现最佳实践

class User{
    String id,kind,result;
    int userId,accountId;
    long timestamp;
    //.. getter & setters 
}
注意:要将字符串转换为json兼容,可以使用
JsonParser
,请尝试以下链接


我建议使用一种简单快捷的方法,即使用
gson
将其转换为列表,但您需要使用POJO类,您可以查看以创建兼容的POJO类,稍后只需使用

空值检查:有时,当值不可用时,您可能会看到一些异常,因此在这些情况下,当您不确定是否存在值时 因此,使用
optInt
optBoolean
等,如果不存在默认值,则只返回默认值,如果值为
string

获取与键关联的可选int值,或者如果 没有这样的键,或者如果值不是数字。如果值为 如果是字符串,将尝试将其作为数字进行计算

e、 g


这是json格式的,您需要在模型类中解析列表您的列表包含3个项目
活动
,每个项目进一步包含单个
项目对象
@PavneetSingh,是的,我的列表包含4个项目,但其大小显示为1。我不知道您是如何解析它的,或者您可能不在解析它,但您必须(使用已给出的答案作为起点)我使用了一些其他库来解析它,但是jsonArray大小只是一个而不是3如果您可以控制这个DB输出,那么我建议将您的
活动
索引为一个数组,包含所有其他对象。这样做将比3个包含单个-2对象的对象更有效
    JSONArray jsonArray = new JSONArray(jsonArrayString);
    List<String> list = new ArrayList<String>();
    for (int i=0; i<jsonArray.length(); i++) {
        list.add( jsonArray.getString(i) );
    }
class User{
    String id,kind,result;
    int userId,accountId;
    long timestamp;
    //.. getter & setters 
}
    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();
    }
int block_id = jObj.getInt("key",defaultvalue);
int block_id = jObj.getInt("userId",0);