2015-10-15 129 views
2

如何解析2個JSON對象?例如解析JSON對象

AJAX返回只有一個對象顯示正確。

Object {32 : "Joseph"} 

但是,當收益超過2個對象,我有這樣的:

ResponseText: "{"users":{"32":"Jospeh"}}{"users":{"48":"Jospeh K."}}" 

我已經嘗試過用JSON.parse解析,但返回一個錯誤:"Uncaught SyntaxError: Unexpected token {"

所以,我如何解析返回這樣的內容:?

Object {32 : "Joseph"} 
Object {48 : "Joseph K"} 

相反 「的responseText」

考慮的:

  1. 如果返回只是一個對象,正確顯示在控制檯(實施例);
  2. 如果返回多於兩個對象,則顯示responseText;
  3. AJAX數據類型:JSON

我會很感激,如果有人能夠幫助這一點。 = d

PHP:

public function get_error_message() 
{ 

    $message = ""; 
    foreach ($this->errors as $value) { 

     if ($value instanceof UsersError) { 
      $message.= json_encode(array('errors' => array($value->getCode() => $value->getMessage()))); 

     } 
    } 

    return $message; 
} 
+0

可以控制JSON字符串的回報? – Chris

+0

這是無效的JSON ...需要修復服務器輸出。只能有一組外括號......要麼是全部響應的'[]'或'{}' – charlietfl

+0

確實,這不是有效的JSON。它應該是:'[{「users」:{「32」:「Jospeh」}},{「users」:{「48」:「Jospeh K。」}}]'...並且這個JSON不根本沒有任何意義。 –

回答

2

的問題是在你的PHP代碼。你不能簡單地連接JSON並認爲它是有效的。

而不是

$message = ""; 
foreach ($this->errors as $value) { 

    if ($value instanceof UsersError) { 
     $message.= json_encode(array('errors' => array($value->getCode() => $value->getMessage()))); 
    } 
} 

你應該產生一個合適的PHP對象,然後將其編碼爲JSON一次。
例如,在你的情況下,它可以是一個數組:

$errorsArray = array(); 
foreach ($this->errors as $value) { 
    if ($value instanceof UsersError) { 
     $errorsArray[] = array($value->getCode() => $value->getMessage()); 
    } 
} 

echo json_encode(array('errors' => $errorsArray)); 

然後,結果將是下列不管有多少個對象返回 - 沒有,

{ 
    "errors": [] 
} 

只有一

{ 
    "errors": [ 
     {"32": "Joseph"} 
    ] 
} 

許多

{ 
    "errors": [ 
     {"32": "Joseph"}, 
     {"48": "Joseph K."} 
    ] 
} 

在JavaScript中,你將能夠做到:

$.ajax({}).done(function(data) { 
    console.log(data.errors.length); 
}); 

您可以生成這將是JavaScript和工作更方便另一個JSON響應。這取決於你的要求和幻想。

例如,我會做一個相關的數組:

PHP:

$errorsArray = array(); 
foreach ($this->errors as $value) { 
    if ($value instanceof UsersError) { 
     $errorsArray[$value->getCode()] = $value->getMessage(); 
    } 
} 

echo json_encode(array('errors' => $errorsArray)); 

JSON:

{ 
    "errors": { 
     "32": "Joseph", 
     "48": "Joseph K." 
    } 
} 
+0

太棒了!很棒。 =)我只改變PHP代碼並工作。謝謝你,小夥伴。你救我一天! – Jospeh

0

這不是一個有效的JSON對象。它是串聯在一起的2個JSON對象,據我所知無效。如果你不能改變後端,並且你必須處理這個,並且可以保證它總是將2個JSON對象連接在一起,那麼在將它們發送到JSON.parse()之前,你必須使用字符串解析來分割它們。 ..)單獨獲取2個JSON對象。

0

這是不是真的標準的方式和你的JSON是無效的:

但嘗試這個

str_data = "{'users':{'32':'Jospeh'}}{'users':{'48':'Jospeh K.'}}"; 
str_data = str_data .replace("}{", "}}{{"); 
items = str_data .split("}{"); 
object_items = []; 
for(i =0; i < items.length; i++){ object_items[i] = JSON.parse(items[i]); } 
0

你JSON是無效的,嘗試推動用戶到一個數組。

var obj = { 
    "users": [ 
     { 
      "name": "Jospeh", 
      "age": 32 
     }, 
     { 
      "name": "Joseph K", 
      "age": 48 
     } 
    ] 
} 

而對於新用戶只需按下...

obj.users.push({ "name": "Neil A.", "age": 72 });