簡體   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