【问题标题】:Extracting JSON value, which is an array提取 JSON 值,它是一个数组
【发布时间】:2018-05-14 09:22:49
【问题描述】:

我正在尝试从 JSONObect 中的键值对中提取值。这是结构:

{"key1 ":["dog","cat"],"key2":["house","boat"]}

所以,我想提取价值狗和猫,也价值房子和船。我在 Java 中尝试了以下操作:

    //obj - has this JSON.

    Iterator iter = obj.keys();
    for (int i=0; i<len; i++){
        String key = (String)iter.next();
        System.out.println("Key is --> "+key);  //This is correctly giving me the keys.
        System.out.println("Value is --> "+clientDetails.getJSONArray(key)); //This is not working. I tried lots of other things but to no avail.

     }

有人可以在这里指导我吗?

谢谢, 凯

【问题讨论】:

  • 这里的clientDetails 是什么?

标签: java arrays json key-value


【解决方案1】:

你应该使用 quick-json 解析器 (https://code.google.com/p/quick-json/)

可以这样使用:

 JsonParserFactory factory=JsonParserFactory.getInstance();
 JSONParser parser=factory.newJsonParser();
 Map jsonMap=parser.parseJson(jsonString);

通过:How to parse JSON in Java 这个人解释的很好。

【讨论】:

    【解决方案2】:

    我认为您在这里使用了错误的名为 clientDetails 的变量。你应该在这里使用相同的 JSON obj。

    上面的代码对我来说使用相同的 obj 可以正常工作:

    String json = "{\"key1 \":[\"dog\",\"cat\"],\"key2\":[\"house\",\"boat\"]}";
    
    JSONObject obj=new JSONObject(json);
    Iterator iter = obj.keys();
    for (int i=0; i<obj.length(); i++){
        String key = (String)iter.next();
        System.out.println("Key is --> "+key);  
        System.out.println("Value is --> "+obj.getJSONArray(key)); 
    }
    

    【讨论】:

    • 我想知道它是如何为你工作的!因为您在最后一行使用 JSONArray。 JSONArray 以“[”开头。这绝对不是 JSONArray。
    • 看,这里在 JSONObject 中有两个键名为 key1key2。并且值对将分别为["house","boat"]["dog","cat"]。两者显然都是 JSON 数组。所以这个程序可以正常工作。
    【解决方案3】:

    感谢您的参与。我找到了问题的答案。下面是我如何提取 JSON 的值,它是键值对,值是一个数组。

    Iterator iter = obj.keys();
        for (int i=0; i<len; i++){
            String key = (String)iter.next();
            System.out.println("Key is --> "+key);  
            String[] arr = (String[])clientDetails.get(key); //Here I am extracting the value which is an array, converting it to String array and then  storing it in a variable of type String[]. Now I can loop through this "arr"
    
    for (int m=0; m<arr.length;m++){
           arr[]m  // Can do whatever I want here!
         } 
    

    谢谢你们! -凯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-25
      • 2020-01-11
      • 2017-09-30
      • 2020-10-06
      • 2022-07-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      相关资源
      最近更新 更多