1

我正在尝试解析来自我的网络服务的 Json 响应。我从我的网络服务器收到这个字符串。

{"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");

当我尝试上面的代码时,我得到正确的经度线是 30.13689,​​而正确的纬度线是 -96.3331183333333。

但是当我运行这个

    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 格式

4

4 回答 4

4

看起来您正在返回 3 个单独的结果。所以,一些可能性...

  1. 将字符串形成一个 JSONArray,然后解析它......

    JSONArray jsonObj = new JSONArray("["+jsonStr.replaceAll("}{","},{")+"]");

    然后遍历数组的每个子元素以获取纬度/经度。

  2. 将返回的字符串拆分为单独的结果字符串,并单独解析它们。也许像这样的东西......

    String[] results = jsonStr.replaceAll("}{","}}{{").split("}{");

    请注意,我们先替换所有,因此我们可以将}and保留{在每个结果的开始/结束处。


更好的办法是修复您的 PHP 服务器代码。您基本上只需要 a[在开头,]结尾和,每个结果之间。我认为这样的事情可能会做到(请为我修复语法 - 我不是 PHP 编码器)。

    $counter = 0;
// read them back
$result = mysql_query( "SELECT * FROM locations" );
echo '[';
while( $data = mysql_fetch_assoc($result) ) {
if (&counter >= 1){
  echo ',';
}
$latFromDb = $data['latitude'];
$longFromDb = $data['longitude'];
$variable = array( 'lon'.$counter => "$longFromDb", 'lat'.$counter => "$latFromDb" );
    // One JSON for both variables
echo json_encode($variable);
$counter++;
}
echo ']';

一旦你明白了,你应该能够说new JSONArray(serverResult),它会将你所有的结果解析成一个 JSON 数组,你可以遍历它。

于 2012-05-03T14:12:17.693 回答
3

您的 jsonStr 无效,每条记录之间缺少括号和逗号。利用:

[
    {
        "lon0": "30.13689",
        "lat0": "-96.3331183333333"
    },
    {
        "lon1": "30.136965",
        "lat1": "-96.33252"
    },
    {
        "lon2": "30.1370383333333",
        "lat2": "-96.3319233333333"
    }
]

PHP:

$sth = mysql_query("SELECT latitude,longitude FROM locations");
$rows = array();
while($r = mysql_fetch_assoc($sth)) {
    $rows[] = $r;
}
echo json_encode($rows);

这应该输出正确的格式。

于 2012-05-03T14:10:44.370 回答
1

JSONObject 只会采用字符串中出现的第一个 JSON。通过做这个:

JSONObject jsonObj = new JSONObject(jsonStr);

您的对象最终将包含第一个 json:

{"lon0":"30.13689","lat0":"-96.3331183333333"}

因此,当您尝试获取有关另一个 json 对象的数据时,它不会找到您指定的键。您必须以某种方式解析字符串,我认为这样做可能会起作用:

String separatedJsons= jsonStr.replace("}{", "}###{");
String jsons[] = separatedJsons.split("###");

这样你就得到了一个字符串数组,每个字符串都有单独的 json。您可以稍后创建您的 JSONObjects。

于 2012-05-03T14:23:51.160 回答
0

我不确定 Web 服务响应的 JSON 格式是否正确,这可能是问题所在?

如果您有办法编辑应用程序生成的字符串,您可以尝试以下操作:

[
{"lon0":"30.13689","lat0":"-96.3331183333333"},
{"lon1":"30.136965","lat1":"-96.33252"},
{"lon2":"30.1370383333333","lat2":"-96.3319233333333"}
]
于 2012-05-03T14:13:36.853 回答