Java:解析字符串中的多个Json对象
我正在尝试解析来自我的Web服务的Json响应。我从web服务器收到此字符串Java:解析字符串中的多个Json对象,java,php,json,Java,Php,Json,我正在尝试解析来自我的Web服务的Json响应。我从web服务器收到此字符串 {"lon0":"30.13689","lat0":"-96.3331183333333"}{"lon1":"30.136965","lat1":"-96.33252"}{"lon2":"30.1370383333333","lat2":"-96.3319233333333"} 我将其放入一个名为jsonStr的字符串中。。 然后我把它放进一个物体里。并得到我需要的字符串 JSONObject jsonObj = n
{"lon0":"30.13689","lat0":"-96.3331183333333"}{"lon1":"30.136965","lat1":"-96.33252"}{"lon2":"30.1370383333333","lat2":"-96.3319233333333"}
我将其放入一个名为jsonStr的字符串中。。
然后我把它放进一个物体里。并得到我需要的字符串
JSONObject jsonObj = new JSONObject(jsonStr);//place it into an object
String longitudecord = jsonObj.getString("lon0");//retrieve the lon0
String latitudecord = jsonObj.getString("lat0");
当我尝试上面的代码时,我得到正确的longitudecord为30.13689,正确的latitudecord为-96.3331183333
但是当我运行这个
String longitudecord = jsonObj.getString("lon1");
String latitudecord = jsonObj.getString("lat1");
我没有得到正确的经纬度。它抛出一个异常。所以我不认为我试图正确地理解“lon1”和“lat1”
有人能帮我吗
***更新*********
我的php代码片段
$counter = 0;
// read them back
$result = mysql_query( "SELECT * FROM locations" );
while( $data = mysql_fetch_assoc($result) ) {
$latFromDb = $data['latitude'];
$longFromDb = $data['longitude'];
$variable = array( 'lon'.$counter => "$longFromDb", 'lat'.$counter => "$latFromDb" );
// One JSON for both variables
echo json_encode($variable);
$counter++;
}
如何返回正确的jSon格式?您的jsonStr无效,每个记录之间缺少括号和逗号。使用:
[
{
"lon0": "30.13689",
"lat0": "-96.3331183333333"
},
{
"lon1": "30.136965",
"lat1": "-96.33252"
},
{
"lon2": "30.1370383333333",
"lat2": "-96.3319233333333"
}
]
PHP:
这应该输出正确的格式。您的jsonStr无效,每个记录之间缺少括号和逗号。使用:
[
{
"lon0": "30.13689",
"lat0": "-96.3331183333333"
},
{
"lon1": "30.136965",
"lat1": "-96.33252"
},
{
"lon2": "30.1370383333333",
"lat2": "-96.3319233333333"
}
]
PHP:
这将输出正确的格式。看起来您将返回3个单独的结果。所以,一些可能性
JSONArray-jsonObj=new-JSONArray(“[”+jsonStr.replaceAll(“}{,“},{”)+“]”;
然后遍历数组的每个子级以获得lat/longString[]results=jsonStr.replaceAll(“}{”,“}}}{”).split(“}{”);
请注意,我们先替换ALL,以便在每个结果的开始/结束处保留}
和{
更好的方法是修复PHP服务器代码。基本上,您只需要在开始时使用
[
,在结束时使用]
,在每个结果之间使用,
。我想类似的方法可以做到这一点(请为我修复语法-我不是PHP程序员)
一旦你得到了它,你应该可以说
新建JSONArray(serverResult)
,它会将你的所有结果解析成一个JSON数组,你可以在其中进行迭代。看起来你会返回3个单独的结果。所以,有一些可能性
JSONArray-jsonObj=new-JSONArray(“[”+jsonStr.replaceAll(“}{,“},{”)+“]”;
然后遍历数组的每个子级以获得lat/longString[]results=jsonStr.replaceAll(“}{”,“}}}{”).split(“}{”);
请注意,我们先替换ALL,以便在每个结果的开始/结束处保留}
和{
更好的方法是修复PHP服务器代码。基本上,您只需要在开始时使用
[
,在结束时使用]
,在每个结果之间使用,
。我想类似的方法可以做到这一点(请为我修复语法-我不是PHP程序员)
一旦你得到了它,你应该可以说
newjsonarray(serverResult)
,它会将你的所有结果解析成一个JSON数组,你可以迭代。我不确定webservice响应是否正确格式化了JSON,这可能是问题所在
如果您有办法编辑应用程序生成的字符串,您可以尝试以下操作:
[
{"lon0":"30.13689","lat0":"-96.3331183333333"},
{"lon1":"30.136965","lat1":"-96.33252"},
{"lon2":"30.1370383333333","lat2":"-96.3319233333333"}
]
我不确定webservice响应是否正确格式化为JSON,这可能是问题所在 如果您有办法编辑应用程序生成的字符串,您可以尝试以下操作:
[
{"lon0":"30.13689","lat0":"-96.3331183333333"},
{"lon1":"30.136965","lat1":"-96.33252"},
{"lon2":"30.1370383333333","lat2":"-96.3319233333333"}
]
JSONObject将只获取字符串上的第一个JSON。通过执行此操作:
JSONObject jsonObj = new JSONObject(jsonStr);
您的对象将最终包含第一个json:
{"lon0":"30.13689","lat0":"-96.3331183333333"}
因此,当您试图获取关于另一个json对象的数据时,它将找不到您指定的键。您必须以某种方式解析字符串,我认为这样做可能会奏效:
String separatedJsons= jsonStr.replace("}{", "}###{");
String jsons[] = separatedJsons.split("###");
这样,您将得到一个字符串数组,每个字符串都有单独的JSON。您可以稍后使用每个字符串创建JSONObject。JSONObject将只获取字符串上的第一个JSON。通过执行此操作:
JSONObject jsonObj = new JSONObject(jsonStr);
您的对象将最终包含第一个json:
{"lon0":"30.13689","lat0":"-96.3331183333333"}
因此,当您试图获取关于另一个json对象的数据时,它将找不到您指定的键。您必须以某种方式解析字符串,我认为这样做可能会奏效:
String separatedJsons= jsonStr.replace("}{", "}###{");
String jsons[] = separatedJsons.split("###");
这样,您将得到一个字符串数组,每个字符串都有单独的JSON。您可以稍后使用每个字符串创建JSONObject。请将标题更新为更具描述性的标题(每个可用的JSON字符串都有多个“{}”…),我建议将JSON字符串作为对象数组[{},{},…]这是有效的JSON字符串吗?我不确定…
{}{}
不是有效的JSON。请参阅无效的JSON。看起来用户要求提供4个单独的lat/日志,它们被附加到一个字符串中,而不是形成一个数组。请将标题更新为更具描述性的标题(每个可用的JSON字符串都有多个“{}”)我建议将json字符串形式为对象数组[{},{},…]这是有效的json字符串吗?我不确定…{}{}
不是有效的JSON。请参阅无效的JSON。看起来用户请求了4个单独的lat/日志,并将它们附加到一个字符串中,而不是将它们组成一个数组。我尝试了第二个,第一个,在调试'05-03 14:45:10.452:E/AndroidRuntime(476)时得到了这一行:java.util.regex.PatternSyntaxException:Syntax error U\U regex\U RULE\U index 1附近的语法:}{抱歉,您需要通过执行此操作对字符进行转义…replaceAll(“\}{,“}}}}{”)
。我已经编辑了我的答案。您在Eclipse中的最新更新表明:转义序列无效(有效的是\b\t\n\f\r\'\\\\\)该死的,我没想到