我有以下JSONObject(不是数组,我不介意转换)。我想做两件事:
将流派的数量计入"诗歌" (count = 2)。
获取作者姓名和流派的关键值:
genreName = newsarticle
authorName = keats
{ "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;
我看过各种解决方案。 stackoverflow上没有类似的问题。我不确定程序是否正确。
答案 0 :(得分:0)
这里有一些问题。
首先,我不知道你在哪里获得了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。该网站将让您可以看到您正在使用的内容。