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