我有一个从URL加载JSON Java函数,然后返回它作为一个JSONObject的Java:包含JSON对象数组
我使用的功能是: json = new JSONObject(jsonString);
从org.json.JSONObject
的问题是包含在对象中的任何数组只是以字符串的形式返回,而不是以数组的形式返回。
我们也不知道被包含的JSON的格式,所以我们不能专门调用对象的属性来解析。它只需要能够处理任何可能存在的数组。
我该如何解决这个问题?
我有一个从URL加载JSON Java函数,然后返回它作为一个JSONObject的Java:包含JSON对象数组
我使用的功能是: json = new JSONObject(jsonString);
从org.json.JSONObject
的问题是包含在对象中的任何数组只是以字符串的形式返回,而不是以数组的形式返回。
我们也不知道被包含的JSON的格式,所以我们不能专门调用对象的属性来解析。它只需要能够处理任何可能存在的数组。
我该如何解决这个问题?
您可以使用Gson来解析json字符串。它干净和容易。
对于使用Gson,您需要先创建一个类来描述这样的单个响应对象。现在,你已经有包含对象的数组JSON字符串
public class ResponseObject {
public String id;
public String name;
}
,如下解析JSON字符串。
Gson gson = new Gson();
ResponseObject[] objectArray = gson.fromJson(jsonString, ResponseObject[].class);
简单!
与Jan Kaufmann的回答相同,问题在于它意味着Java必须知道JSON的格式,但事实并非如此。 Java将JSONObject返回给Velocity模板,因此Java需要能够在不知道格式的情况下处理对象中的数组。 – marcusds
如果你还是想的JSONObject,您检索数组实际上是这样的..
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray hobbies = jsonObject.getJSONArray("hobbies");
这样
hobbies.getString(0)
hobbies.getString(1)
etc..
JSONArray本身具有获得() ,getDouble(),getInt()等。
问题在于它意味着Java必须知道JSON的格式,但事实并非如此。 Java将JSONObject返回给Velocity模板,因此Java需要能够在不知道格式的情况下处理对象中的数组。 – marcusds
这不应该是你自己的责任吗?但你并没有问及迭代格式,也没有提供json的结构。它就像*做它/我为我工作*一样,以检查该条目是否在数组中讨论了多次,像这样[one](http://stackoverflow.com/questions/9988287/test -if-IT-是-的JSONObject或 - jSONArray),其中 –
你有一些代码示例吗?输入输出? – cralfaro
你应该看看使用谷歌的Gson库来反序列化JSON文件。 –