繁体   English   中英

Java:在一个字符串中解析多个Json对象

[英]Java: Parsing more than one Json Object in a string

我正在尝试从我的Web服务解析Json响应。 我从Web服务器收到此字符串。

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

您似乎要返回3个单独的结果。 所以,一些可能性...

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

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

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

  2. 将返回的String拆分为单独的结果字符串,然后分别对其进行解析。 也许是这样的...

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

    请注意,我们首先替换All,因此可以将}{保留在每个结果的开头/结尾。


更好的办法是修复您的PHP服务器代码。 基本上,每个结果之间只需要[开头, ]末尾,和, 我认为可以这样做(请为我修复语法-我不是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数组。

您的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);

这应该输出正确的格式。

JSONObject将仅采用数字形式的第一个JSON。 通过做这个:

JSONObject jsonObj = new JSONObject(jsonStr);

您的对象最终将包含firs json:

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

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

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

这样,您最终得到一个字符串数组,每个字符串都有各自的json。 您可以稍后再创建一个JSONObject。

我不确定网络服务响应是否正确设置了JSON格式,这可能是问题所在吗?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM