【问题标题】:Json object contain json array parsingJson对象包含json数组解析
【发布时间】:2013-08-05 12:21:30
【问题描述】:

我正在使用一个函数将列表项、名称、id 添加到一个 jsonobject 中并将该对象返回到被调用的函数中,然后一路走来......但我对解析那个 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解析吗?

标签: java json


【解决方案1】:

创建一个 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"));
    

    【讨论】:

    • @AravindCheekkallur 很高兴为您提供帮助。请考虑接受答案。谢谢。
    【解决方案3】:

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

    另外需要注意的是,您在输出中显示给我们的 json 不是有效的 json。或者更确切地说,它有2个同名的字段,不建议这样做,因为一个对象只能有1个同名的字段。

    您能否发布您用于创建和解析 json 的所有代码?另外,您是否考虑过使用 GSON?来自 Google 的一个非常简单且功能强大的 JSON 库。

    【讨论】:

      【解决方案4】:

      我认为您可以使用以下方法之一:

      第一个:定义域对象并使用框架将字符串“反序列化”到该对象中。 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/private 访问,但这几乎解释了这个想法。

      您也可以继续使用 JSONObject,它应该有 getter,如下所示:

      JSONObject jsonObject = getObjectSomehow(); jsonObject.get("名称");

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        我假设您想将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"));
        }
        

        【讨论】:

          【解决方案6】:
          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
          

          【讨论】:

            【解决方案7】:

            可以使用以下代码解析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) {
            
            
             }
            

            【讨论】:

              猜你喜欢
              • 2020-08-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-12-07
              • 2015-06-02
              • 1970-01-01
              相关资源
              最近更新 更多