无法解析 json 数组中的 json 数组
Trouble parsing a json array inside a json array
我在解析 java 中的简单 json 时遇到问题。这是示例 json.
[
{
"politics": [
{
"type": "admin2",
"friendly_type": "country",
"name": "United States",
"code": "usa"
},
{
"type": "admin6",
"friendly_type": "county",
"name": "Gratiot",
"code": "26_057"
},
{
"type": "constituency",
"friendly_type": "constituency",
"name": "Eighth district, MI",
"code": "26_08"
},
{
"type": "admin6",
"friendly_type": "county",
"name": "Clinton",
"code": "26_037"
},
{
"type": "admin4",
"friendly_type": "state",
"name": "Michigan",
"code": "us26"
},
{
"type": "constituency",
"friendly_type": "constituency",
"name": "Fourth district, MI",
"code": "26_04"
}
],
"location": {
"latitude": 43.111976,
"longitude": -84.71275
}
}
]
现在这给了我正确的 json 索引。
JSONParser parser = new JSONParser();
Object obj = parser.parse(output);
JSONArray array = (JSONArray)obj;
String jsonobj = array.get(0).toString();
{"politics":[{"code":"usa","name":"United States","type":"admin2","friendly_type":"country"},{"code":"26_057","name":"Gratiot","type":"admin6","friendly_type":"county"},{"code":"26_08","name":"Eighth district, MI","type":"constituency","friendly_type":"constituency"},{"code":"26_037","name":"Clinton","type":"admin6","friendly_type":"county"},{"code":"us26","name":"Michigan","type":"admin4","friendly_type":"state"},{"code":"26_04","name":"Fourth district, MI","type":"constituency","friendly_type":"constituency"}],"location":{"latitude":43.111976,"longitude":-84.71275}}
但我似乎无法从中获得我想要的属性。
JSONObject obj1 = new JSONObject(jsonobj);
String n = obj1.getString("admin4");
System.out.println(n);
我需要的只是 json 这个州,即密歇根州。我哪里错了?
非常感谢您的帮助。
简化对 json 对象的搜索和其他操作的最佳解决方案是将 json 字符串转换为 java 对象并执行操作。
将 json 字符串转换为 java 对象使用以下代码:
import org.codehaus.jackson.map.ObjectMapper;
import org.json.JSONException;
import org.json.JSONObject;
YourObject myObject;
ObjectMapper mapper = new ObjectMapper();
try{
myObject= mapper.readValue(jsonData, myObject.class);
}
catch (Exception e) {
e.printStackTrace();
}
例如定义你的 class 屁股如下:
public class myObject{
private List<Politics> politics;
private Location location;
// define getters and setters
}
define Politics and Location class:
public class Politics
{
String type;
String friendly_type;
String name;
String code;
// define getters and setters
}
public class Location
{
String latitude;
String longitude;
// define getters and setters
}
首先,array.get(0)
将为您获取主数组中的第一个元素。第一个元素是一个 JSON 对象,它有两个属性 politics
和 location
。您似乎对 politics
属性 的数组值内的值感兴趣。您必须使用此 ((JSONArray)((JSONObject)array.get(0)).get("politics"))
来获取该数组。
其次,admin4
不是属性它实际上是type
的一个值属性。您必须遍历数组才能找到它。
这是一个完整的例子:
JSONParser parser = new JSONParser();
Object obj = parser.parse(output);
JSONArray array = (JSONArray)obj;
JSONArray politics = ((JSONObject)array.get(0)).get("politics"));
JSONObject obj = null;
for(int i = 0; i < politics.size(); i++){
if(((JSONObject)politics.get(i)).getString("type").equals("admin4")){
obj = ((JSONObject)politics.get(i));
}
}
if(obj != null){
// Do something with the object.
}
您似乎在使用 simple json
库。我记不清是 .get("politics")
还是 .getJSONObject("politics")
。我例子中的方法名可能还有其他错误。
这是因为您正在尝试获取 JSON 对象的内部元素。
尝试
JSONObject obj1 = new JSONObject(jsonobj);
JSONArray arr = (JSONArray) obj1.getObject("politics");
您将得到一个 JSON 数组对象,它进一步构成了 JSON 个对象。
现在,为了使用键获取值,您必须按如下所示迭代数组:
for(int i=0; i<arr.size(); i++){
JSONObject obj = arr.getJSONArray(i);
System.out.println(obj.getString("type"));
}
现在将为您提供输出:
admin2
admin6
constituency
admin6
admin4
constituency
我在解析 java 中的简单 json 时遇到问题。这是示例 json.
[
{
"politics": [
{
"type": "admin2",
"friendly_type": "country",
"name": "United States",
"code": "usa"
},
{
"type": "admin6",
"friendly_type": "county",
"name": "Gratiot",
"code": "26_057"
},
{
"type": "constituency",
"friendly_type": "constituency",
"name": "Eighth district, MI",
"code": "26_08"
},
{
"type": "admin6",
"friendly_type": "county",
"name": "Clinton",
"code": "26_037"
},
{
"type": "admin4",
"friendly_type": "state",
"name": "Michigan",
"code": "us26"
},
{
"type": "constituency",
"friendly_type": "constituency",
"name": "Fourth district, MI",
"code": "26_04"
}
],
"location": {
"latitude": 43.111976,
"longitude": -84.71275
}
}
]
现在这给了我正确的 json 索引。
JSONParser parser = new JSONParser();
Object obj = parser.parse(output);
JSONArray array = (JSONArray)obj;
String jsonobj = array.get(0).toString();
{"politics":[{"code":"usa","name":"United States","type":"admin2","friendly_type":"country"},{"code":"26_057","name":"Gratiot","type":"admin6","friendly_type":"county"},{"code":"26_08","name":"Eighth district, MI","type":"constituency","friendly_type":"constituency"},{"code":"26_037","name":"Clinton","type":"admin6","friendly_type":"county"},{"code":"us26","name":"Michigan","type":"admin4","friendly_type":"state"},{"code":"26_04","name":"Fourth district, MI","type":"constituency","friendly_type":"constituency"}],"location":{"latitude":43.111976,"longitude":-84.71275}}
但我似乎无法从中获得我想要的属性。
JSONObject obj1 = new JSONObject(jsonobj);
String n = obj1.getString("admin4");
System.out.println(n);
我需要的只是 json 这个州,即密歇根州。我哪里错了? 非常感谢您的帮助。
简化对 json 对象的搜索和其他操作的最佳解决方案是将 json 字符串转换为 java 对象并执行操作。
将 json 字符串转换为 java 对象使用以下代码:
import org.codehaus.jackson.map.ObjectMapper;
import org.json.JSONException;
import org.json.JSONObject;
YourObject myObject;
ObjectMapper mapper = new ObjectMapper();
try{
myObject= mapper.readValue(jsonData, myObject.class);
}
catch (Exception e) {
e.printStackTrace();
}
例如定义你的 class 屁股如下:
public class myObject{
private List<Politics> politics;
private Location location;
// define getters and setters
}
define Politics and Location class:
public class Politics
{
String type;
String friendly_type;
String name;
String code;
// define getters and setters
}
public class Location
{
String latitude;
String longitude;
// define getters and setters
}
首先,array.get(0)
将为您获取主数组中的第一个元素。第一个元素是一个 JSON 对象,它有两个属性 politics
和 location
。您似乎对 politics
属性 的数组值内的值感兴趣。您必须使用此 ((JSONArray)((JSONObject)array.get(0)).get("politics"))
来获取该数组。
其次,admin4
不是属性它实际上是type
的一个值属性。您必须遍历数组才能找到它。
这是一个完整的例子:
JSONParser parser = new JSONParser();
Object obj = parser.parse(output);
JSONArray array = (JSONArray)obj;
JSONArray politics = ((JSONObject)array.get(0)).get("politics"));
JSONObject obj = null;
for(int i = 0; i < politics.size(); i++){
if(((JSONObject)politics.get(i)).getString("type").equals("admin4")){
obj = ((JSONObject)politics.get(i));
}
}
if(obj != null){
// Do something with the object.
}
您似乎在使用 simple json
库。我记不清是 .get("politics")
还是 .getJSONObject("politics")
。我例子中的方法名可能还有其他错误。
这是因为您正在尝试获取 JSON 对象的内部元素。 尝试
JSONObject obj1 = new JSONObject(jsonobj);
JSONArray arr = (JSONArray) obj1.getObject("politics");
您将得到一个 JSON 数组对象,它进一步构成了 JSON 个对象。 现在,为了使用键获取值,您必须按如下所示迭代数组:
for(int i=0; i<arr.size(); i++){
JSONObject obj = arr.getJSONArray(i);
System.out.println(obj.getString("type"));
}
现在将为您提供输出:
admin2
admin6
constituency
admin6
admin4
constituency