我对JSON没有多少经验,所以问题可能有点微不足道,但我无法解决这个问题。 我有一个简单的JSON字符串,如:
["{\"__type:\"GeoPoint\",\"latitude\":51.165691,\"longitude\":10.451526}","{\"__type:\"GeoPoint\",\"latitude\":20.593684,\"longitude\":78.96288}"]
我想解析JSON并获取不同变量中的值。我已经实现了下面的代码片段,但它没有按预期工作。解析JSON后我看不到任何日志。 代码:
String jsonString = arg0.get(i).get(0).getJSONArray("tripPoints").toString();
Log.e("Json String", jsonString);
JSONArray jsonarray;
try {
jsonarray = new JSONArray(jsonString);
for(int j=0; j<jsonarray.length(); j++){
JSONObject obj = jsonarray.getJSONObject(j);
String latitude = obj.getString("latitude");
String longitude = obj.getString("longitude");
Log.e("triplatitude", latitude);
Log.e("triplongitude", longitude);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如何从JSON获取数据?我哪里错了?
答案 0 :(得分:1)
我假设您的json(在json数组中)没有转义并且有一点格式化如下所示:
[
{
"__type": "GeoPoint",
"latitude": 51.165691,
"longitude": 10.451526
},
{
"__type": "GeoPoint",
"latitude": 20.593684,
"longitude": 78.96288
}
]
我假设__type
在您注释纬度和经度时会起作用并插入:obj.getString(“__ type”);但是你现在在纬度和经度上使用obj.getString,而它们不是字符串。
因此请用于纬度和经度:(编辑:这不是必需的,因为json解析器会自动生成一个String)
obj.getDouble("latitude");
修改强>
我实际上只是测试了你的代码,这很有效:
String jsonString = " [{\n" +
" \"__type\": \"GeoPoint\",\n" +
" \"latitude\": 51.165691,\n" +
" \"longitude\": 10.451526\n" +
" },\n" +
" {\n" +
" \"__type\": \"GeoPoint\",\n" +
" \"latitude\": 20.593684,\n" +
" \"longitude\": 78.96288\n" +
" }]";
JSONArray jsonarray;
try {
jsonarray = new JSONArray(jsonString);
for(int j=0; j<jsonarray.length(); j++){
JSONObject obj = jsonarray.getJSONObject(j);
String latitude = obj.getString("latitude");
String longitude = obj.getString("longitude");
Log.e("triplatitude", latitude);
Log.e("triplongitude", longitude);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 1 :(得分:1)
您的JSON数组不包含有效的JSON对象。删除\
转义字符,最终会得到这个,这是无效的JSON:
[
"{"__type:"GeoPoint","latitude":51.165691,"longitude":10.451526}",
"{"__type:"GeoPoint","latitude":20.593684,"longitude":78.96288}"
]
首先尝试修复JSON,然后查看这是否解决了您的问题。您可以使用JSONLint来确保JSON有效。
基本上你的JSON应该是这样的:
[
{
"__type": "GeoPoint",
"latitude": 51.165691,
"longitude": 10.451526
},
{
"__type": "GeoPoint",
"latitude": 20.593684,
"longitude": 78.96288
}
]
编辑1
似乎有点混乱。问题是以下是JSON术语中的字符串:
"{"__type:"GeoPoint","latitude":51.165691,"longitude":10.451526}"
我们需要一个对象,因此我们从开头和结尾删除"
,将其转换为以下内容:
{"__type:"GeoPoint","latitude":51.165691,"longitude":10.451526}
这是无效的JSON。我们要解决此问题的方法是在"
之后添加__type
。现在它看起来像这样:
{"__type":"GeoPoint","latitude":51.165691,"longitude":10.451526}
最后它有效。您需要找到一种方法来修复源代码中的JSON。什么是arg0
对象以及它从何处获取数据?
编辑2
如果您无法在源代码中修复JSON,则以下快速入侵应适用于此案例:
jsonString = jsonString.replace("__type", "__type\"")
.replace("\"{", "{")
.replace("}\"", "}")
.replace("\\\"", "\"");