java - 遍历 JSON 文件中的多个对象

标签 java json

我正在解析一个通过访问 API 检索的 JSON 文件。现在,我可以创建 Offer 类的对象的 ArrayList,但我只读取第一个 JSON 对象并获取我感兴趣的字符串。我如何创建尽可能多的我自己的 Offer JSON 文件中的对象?

换句话说,我需要迭代 JSON 文件并获取所有优惠。

JSON 如下所示:

{"offer":"expiration":"2011-04-08T02:30:00Z","valid_from":"2011-04-07T12:00:31Z","business":{"地址":{"state":"NY","zip":"10013","cross_streets":"查塔姆广场和沃斯街","address_1":"莫特街 12 号","address_2":null,"city ":"纽约"},"电话":"2126192989","已发布":"2011-04-07T12:00:33Z","re​​scinded_at":null,"valid_to":"2011-04-08T02:00 :00Z"}}, {"offer":"expiration":"2011-04-08T02:30:00Z","valid_from":"2011-04-07T12:00:31Z","business":{"地址":{"state":"NY","zip":"10013","cross_streets":"查塔姆广场和沃斯街","address_1":"莫特街 12 号","address_2":null,"city ":"纽约"},"电话":"2126192989","已发布":"2011-04-07T12:00:33Z","re​​scinded_at":null,"valid_to":"2011-04-08T02:00 :00Z"}}, {"offer":"expiration":"2011-04-08T02:30:00Z","valid_from":"2011-04-07T12:00:31Z","business":{"address":{"state":"NY","zip":"10013","cross_streets":"查塔姆广场和沃斯街","address_1":"莫特街 12 号","address_2":null,"city":"纽约"},"电话":"2126192989","已发布":"2011-04-07T12:00:33Z","re​​scinded_at":null,"valid_to":"2011-04-08T02:00:00Z"}}

如您所见,报价对象一个接一个...

这是我到目前为止的代码:

        ArrayList<Offer> offerList = new ArrayList<Offer>();

        for(String url: urls) {
            OAuthConsumer consumer = new DefaultOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
            consumer.setTokenWithSecret("", "");

            try {

                URL url1 = new URL(url);
                HttpURLConnection request = (HttpURLConnection) url1.openConnection();

                // sign the request
                consumer.sign(request);

                // send the request
                request.connect();


                String JSONString = convertStreamToString(request.getInputStream());

                JSONObject jObject = new JSONObject(JSONString);

                JSONObject offerObject = jObject.getJSONObject("offer");

                String titleValue = offerObject.getString("title");
                //System.out.println(titleValue);

                String descriptionValue = offerObject.getString("description");
                //System.out.println(attributeValue);
                JSONObject businessObject = offerObject.getJSONObject("business");
                String nameValue = businessObject.getString("name");

                Offer myOffer = new Offer(titleValue, descriptionValue, nameValue);

                offerList.add(myOffer);
                Log.v("ArrayList:", offerList.toString());

            } catch (Exception e) {
                e.printStackTrace();

            } 
        }
        return offerList; 

最佳答案

您提供的 JSON 不是有效的 JSON。

如果在开头放置“[”,在末尾放置“]”,它将成为有效的 JSONArray。

JSONArray JavaDoc

你应该能够做这样的事情:

JSONArray array = new JSONArray(inputJSON);
for(int index = 0; index < array.length(); ++index) {
  JSONObject offerObject = array.getJSONObject(index);
  //... your offer calculation...add offer to list...
}

如果您有 Offer JSON 的 JSONObjects 的 JSONArray(如果您像我建议的那样添加括号,那么您就会这样做),那么您可以迭代 JSONArray 的长度,在每次传递时获取 JSONObject,并创建 Offer正如您在提供的示例中所做的那样。

关于java - 遍历 JSON 文件中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5987381/

相关文章:

javascript - Angular js解析Json对象

Python:将多个json对象写入一个文件;稍后通过 json.load 打开和加载

java - 你能以编程方式访问当前的 Heroku dyno id/name 吗?

java - Android Geocoder getFromLocationName 因有效地址而失败

java - 创建对象堆栈类 - 我哪里出错了?

json - Coldfusion 9 序列化JSON()

javascript - 为什么我的POST方法无法接收这个ajax?

java - NetBeans - 如何从外部库导入类

java - 大规模INSERT——spring框架

javascript - 是否可以将模板对象保存为 JSON 标准格式的 JSON 文件?