计算JSON中的键值并提取值

时间:2017-10-27 22:21:19

标签: java json parsing

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

  1. 将流派的数量计入"诗歌" (count = 2)。

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

    • authorName = malcolm
    • genreName = newsarticle

    • authorName = keats

    • genreName = poetry
  3. 
    
    { "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);
        } 
    	    
    }
    &#13;
    &#13;
    &#13;

    我看过各种解决方案。 stackoverflow上没有类似的问题。我不确定程序是否正确。

1 个答案:

答案 0 :(得分:0)

这里有一些问题。

首先,我不知道你在哪里获得了JSON的例子,但是你无法使用它。这甚至不是有效的JSON格式。

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

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

这是您尝试使用JSON创建的结构。

因此,您要将此文件从文件解析为JSONObject,其中包含一个名为AddressBook的密钥。该关键点指向代表作者的JSONObjects数组。每个对象都有一个名为genre的密钥。您正在尝试访问genre密钥并依赖某个条件。

您上面所做的是创建尝试从无效字符串创建JSONObject,然后将整个JSONObject本身添加到JSONArrayJSONArray.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。该网站将让您可以看到您正在使用的内容。