2015-10-15 127 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 });