【问题标题】:count key value in JSON and extract values计算 JSON 中的键值并提取值
【发布时间】:2017-10-27 22:21:19
【问题描述】:

我有以下 JSONObject(不是数组,我不介意转换)。我正在尝试做两件事:

  1. 获取流派条目的计数为“诗歌”(计数 = 2)。

  2. 获取作者姓名和流派的键值:

    • 作者名 = 马尔科姆
    • genreName = 新闻文章

    • 作者名 = 济慈

    • genreName = 诗歌

{ "AddressBook" :{

"Details" :{
"authorname" :{

"Author-malcolm":{
"genre" :"poetry"
}

"Author-keats":{
"genre" :"poetry"
}

}

}
}
}

我尝试过的代码:

  public static void main(String[] args) throws Exception, IOException, ParseException {

    JSONParser parser = new JSONParser();
    
        Object obj = parser.parse(new FileReader("My path to JSON"));
    
        JSONObject jsonObject = (JSONObject) obj;
        JSONArray arrayhere = new JSONArray();
        arrayhere.add(obj);
        System.out.println(arrayhere);	            
        int count = 0;
        for(int i = 0; i < arrayhere.size(); i++) {
          JSONObject element = arrayhere.getJSONObject(i);//The method getJSONObject(int) is undefined for the type JSONArray
          String branchName = element.getString("genre");//The method getString(String) is undefined for the type JSONObject
          if(branchName.equals("poetry")) {
            count ++;
          }
        }
        System.out.println("Count f0r poetry genre=" + count);
    } 
	    
}

我已经查看了所有解决方案。在 stackoverflow 上没有类似的问题。我不确定程序是否正确。

【问题讨论】:

    标签: java json parsing


    【解决方案1】:

    这里有几个问题。

    首先,我不确定您从哪里获得该示例 JSON,但您无法使用它。这甚至不是有效的 JSON 格式。

    看起来你想要这样的东西:

    {
      AddressBook:
      [
        {
          authorname: "author-malcom",
          genre:"poetry"
        },
       {
          authorname: "author-keats",
          genre: "poetry"
       }
      ]
    }
    

    这就是您尝试在 JSON 中创建的结构。

    因此,您将其从文件解析为 JSONObject,其中包含一个名为 AddressBook 的键。该键指向代表作者的JSONObjects 数组。这些对象中的每一个都有一个名为genre 的键。您正在尝试访问 genre 键并根据条件进行计数。

    您在上面所做的是创建尝试从无效字符串创建JSONObject,然后将整个JSONObject 本身添加到JSONArray 中。 JSONArray.add() 不会将对象转换为数组,而是将其添加到数组中。

    jsonObj => {"Name":"name1","Id":1000}
    jsonArray.add(jsonObj)
    jsonArray => [{"Name":"name1","Id":1000}]
    

    这就是您在上面的代码中所做的。您没有从JSONObject创建数组,而是向数组添加了一个对象。

    正确使用应该是这样的:

    Object obj = parser.parse(new FileReader("path_to_file"));
    JSONObject jobj = (JSONObject) obj;
    
    //access key AddressBook
    JSONArray author_array = jobj.getJSONArray("AddressBook");
    
    int poetry = 0;
    for(int i = 0; i < author_array.length(); i++) {
      JSONObject author = (JSONObject) author_array.get(i);
      if(author.getString("genre").equals("poetry")) {
        poetry++;
      }
    }
    

    总而言之,您的问题来自于对 JSON 格式以及如何访问 JSON 对象中的元素缺乏了解。 粘贴我在上面here 给你的示例 JSONObject。该网站可以让您直观地了解您正在使用的内容。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2020-01-14
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多