JSON对象包含JSON数组的解析

3
我正在使用一个函数将列表项、名称、ID添加到一个JSON对象中,并将该对象返回到调用函数,然后一路获取数据。但是,我对解析该JSON字符串感到有些困惑。
JSONObject obj = abcobj.function();

public JSONObject function()
{
  jsonobj.put("test",list);
  jsonobj.put("name",name);
  jsonobj.put("id",id);
  return jsonobj;
}

System.out.println("Json object"+devid);

输出

 {"test":["test","test1"],"name":"xxxxx","id":"1234"}

请帮我解析这个对象


你想使用Java来解析它吗? - fiskeben
7个回答

3
创建一个JSONObject类的实例,使用for循环遍历每个json项,最后将每个json数据存储在变量中。
JSONObject jsonRoot = new JSONObject(jsonData);
  List<String> list = new ArrayList<String>();    
  JSONArray jsonList = jsonRoot.getJSONArray("test");
 for (int i = 0; i < jsonList.length(); i++) {
          list.add(jsonList.getString(i));
   }
 String str_name = jsonRoot.getString("name");
 Integer str_id = Integer.valueOf(jsonRoot.getInt("id"));

希望这能帮到您。


2
如果您正在使用org.json. Java解析器,以下是操作步骤:
String jsonData = "{\"test\":[\"test\",\"test1\"],\"name\":\"xxxxx\",\"id\":\"1234\"}";

JSONObject jsonRoot = new JSONObject(jsonData);

List<String> list = new ArrayList<String>();    
JSONArray jsonList = jsonRoot.getJSONArray("test");
for (int i = 0; i < jsonList.length(); i++) {
  list.add(jsonList.getString(i));
}

String name = jsonRoot.getString("name");
Integer id = Integer.valueOf(jsonRoot.getInt("id"));

0

我假设你想要将interestKeys存储在一个列表中。

使用org.json库:

JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs},{interestKey:Cats}]}");

List<String> list = new ArrayList<String>();
JSONArray array = obj.getJSONArray("interests");
for(int i = 0 ; i < array.length() ; i++){
    list.add(array.getJSONObject(i).getString("interestKey"));
}

0

我认为你可以采用以下其中一种方法:

第一种方法:定义一个领域对象,并使用框架将字符串“反序列化”为该对象。在这里,GSON/Jackson 应该适合你的需求。

示例:

public class MyObject {
   String [] test;
   String name; // the second name in example is wrong json 
}

现在可以这样使用GSON:

 MyObject obj = new Gson().fromJson(yourStringComesHere, MyObject.class);
 obj.name

当然,你应该为MyObject类中的数据字段提供getter/私有访问,但这基本上解释了这个想法。
或者,您可以继续使用JSONObject,它应该有getter,就像这样:
JSONObject jsonObject = getObjectSomehow(); jsonObject.get("name");
希望这可以帮助到您。

0
Object s=devid.get("test");
ArrayList<String> d=new ArrayList<>();
d=(ArrayList<String>) s;
for(Object i: d)
    {
    System.out.println(i);
    }

    System.out.println(obj.get("name"));
    System.out.println(obj.get("id"));
*output*

test
test1
xxxxx 
1234

0

你想要解析什么?如果你想要访问test1内部的数据,那么你需要检索test[1],然后从中获取数据。如果你想知道为什么在列表中看到对象的名称,我的猜测是你有一个toString,在你添加到该列表的类中只显示对象的名称。

另一件需要注意的事情是,你向我们展示的json不是有效的json。或者说,它有两个具有相同名称的字段,这不被推荐,因为一个对象只能有一个具有相同名称的字段。

你能发布你用于创建和解析json的所有代码吗?此外,你考虑过使用GSON吗?这是来自Google的非常简单而强大的JSON库。


0
您可以使用以下代码解析JSON:
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

  Map<String,Object> map = new HashMap<String,Object>();
  ArrayList<String> testList = new ArrayList<String>();
  String jsonString;
  Gson gson = new Gson();

try {
        jsonString = "{"test":["test","test1"],"name":"xxxxx","id":"1234"}";
        map = (Map<String,Object>) gson.fromJson(jsonString, map.getClass());
        testList = (ArrayList<String>) map.get("test");
 }
 catch (Exception e) {


 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接