Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:解析字符串中的多个Json对象_Java_Php_Json - Fatal编程技术网

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

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

我正在尝试解析来自我的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");
当我尝试上面的代码时,我得到正确的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,并解析它

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

    然后遍历数组的每个子级以获得lat/long

  • 将返回的字符串拆分为单独的结果字符串,并分别对其进行分析。可能是这样的

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

    请注意,我们先替换ALL,以便在每个结果的开始/结束处保留
    }
    {


  • 更好的方法是修复PHP服务器代码。基本上,您只需要在开始时使用
    [
    ,在结束时使用
    ]
    ,在每个结果之间使用
    。我想类似的方法可以做到这一点(请为我修复语法-我不是PHP程序员)


    一旦你得到了它,你应该可以说
    新建JSONArray(serverResult)
    ,它会将你的所有结果解析成一个JSON数组,你可以在其中进行迭代。

    看起来你会返回3个单独的结果。所以,有一些可能性

  • 将字符串形成一个JSONArray,并解析它

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

    然后遍历数组的每个子级以获得lat/long

  • 将返回的字符串拆分为单独的结果字符串,并分别对其进行分析。可能是这样的

    String[]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\'\\\\\)该死的,我没想到