处理:如何检查是否绑定了JSON对象

时间:2013-12-30 20:50:06

标签: java json api processing

由于处理论坛失败,我希望你们中的一个能帮助我。

我制作了一个Processing sketch,它以JSON格式从API(在此测试:http://www.europeana.eu/portal/api/console.html)中提取数据,并读取此数据的某些字段以进行可视化。到目前为止一切正常,除非有些字段没有绑定到每个JSONObject。

这是检索数据的代码:

JSONObject json;
json = loadJSONObject("data.json"); // loading my JSON file into the object
JSONArray CHOData = json.getJSONArray("items"); // array of the items I want data from

for (int i = 0; i < CHOData.size(); i++) {
    JSONObject CHO = CHOData.getJSONObject(i); // get a specific item
    JSONArray previewObj = CHO.getJSONArray("edmPreview"); // this field is an array, so I need to store it in a JSONArray object first
    String[] previewArray = previewObj.getStringArray(); // here I store it in my actual string array
    String preview = previewArray[0]; // I only need the first element
}

正如你所看到的,我想要第一个字符串&#34; edmPreview&#34;对象中的数组。当我运行草图时,我收到一个错误:&#34; JSONObject [&#34; edmPreview&#34;]未找到。&#34; 这当然是因为不是每个项目都有这样的对象。但是如何测试项目中是否存在具有此名称的对象?我尝试使用if(CHO.getJSONObject(&#34; edmPreview&#34;)!= null),但是同样的错误。有没有办法查看JSONObject并检查名为&#34; edmPreview&#34;?的数据值?处理参考中没有解释这样的功能。

JSON文件基本上如下所示:

{
"items": [
   {
     "id": "someID",
     "edmPreview": [
       "http://europeanastatic.eu/api/image?uri=someimage.jpg"
     ],
     // some other fields
   }, // some other items
]
}

我对这个JSON的东西不熟悉,所以也许我会错过一些重要的东西......感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

所以我自己找到了答案,但没有在Processing参考中找到答案,而是在Java(http://www.json.org/javadoc/org/json/JSONObject.html)中对JSONObject类的实际引用中。我尝试了一些方法,发现hasKey()(这实际上是我自己提出的,将方法“has()”与术语“key”,纯粹巧合相结合)作为布尔值非常有效:

  String preview = "";
  if (CHO.hasKey("edmPreview")) {
    JSONArray previewObj = CHO.getJSONArray("edmPreview");
    String[] previewArray = previewObj.getStringArray();
    preview = previewArray[0];
  }

所以现在我了解到Processing本质上只是Java,有时并不是每个方法都在Reference中编写。 : - )