JSON解析问题代码

问题描述:

我工作的代码,但它有点失败:我的JSON响应是一个有效的JSON,因为我在JSOnLint.com上检查它。JSON解析问题代码

因此,这里是它如果我开始我的JSON具有以下制造麻烦

$.post("items.cfm",{"term":request.term}) 
    .done(function(data){ 
     alert(data); 
     try{ 
      var obj = $.parseJSON(data), 
      values = []; 
      alert(obj[x].id.split('~')[3]); 

      for(var x = 0; x < obj.length; x++){ 
       values.push({ 
       "label":obj[x].text, "value":obj[x].id, 
       "price":obj[x].id.split('~')[3] 
       }); 
      } 
      response(values); 
     } catch(e) { 
      alert(e); 
     } 
}) 

的一段代码:

{ 
    "text": "Blue CPR Pocket Mask", 
    "id": "128177000003239005~Blue~YES~10.75" 
}, { 
    "text": "CPR Face Shields", 
    "id": "128177000000138987~CPs~YES~41.83" 
} 

...它抛出一个错误:

SyntaxError: Unexpected token , in JSON at position

...但如果我以:

[{ 
     "text": "Blue CPR Pocket Mask", 
     "id": "128177000003239005~Blue~YES~10.75" 
    }, { 
     "text": "CPR Face Shields", 
     "id": "128177000000138987~CPs~YES~41.83" 
    } 
] 

一个有效的JSON,但它与我的代码失败,因为我试图解析它并使用它的值,但它对我说,ID是未定义的。所以我应该怎么做才能使它工作。

更新#1

我跟每个人的方法,给了一个尝试,现在开始我下面的错误

TypeError: Cannot use 'in' operator to search for '4592' in 
+0

您有两个JSON对象,而不是一个。因此,将它们视为两个不同的对象,或将它们组合为另一个对象的数组或内部对象。而且,你为什么要解析?它已经是JSON了,不是吗? – RaR

+0

你的try里面有多少'console.log(obj)'返回? –

你不应该分析它,因为它的阵列。 另外,您在alert函数中使用的变量“x”在for循环之上。这就是为什么你得到的错误'ID'是未定义的。

此外,这为我工作。

var data = [{ 
      "text": "Blue CPR Pocket Mask", 
      "id": "12817700000323900" 
     }, 
     { 
      "text": "CPR Face Shields", 
     "id": "128177000000138987" 
     } 
     ] 
     function test1(){ 
      var obj = data 
      values = []; 
      console.log(obj) 

      for(var x = 0; x < obj.length; x++){ 
       values.push({"label":obj[x].text, "value":obj[x].id, "price":obj[x].id.split('~')[3]}); 
      } 
     } 
     test1() 

尝试使用每一个循环,你的JSON是有效的,如果你有[],因为您有需要是一个数组中的多个对象

var data = [{ 
 
    "text": "Blue CPR Pocket Mask", 
 
    "id": "128177000003239005~Blue~YES~10.75" 
 
}, { 
 
    "text": "CPR Face Shields", 
 
    "id": "128177000000138987~CPs~YES~41.83" 
 
}]; 
 
var values = []; 
 
$.each(data, function(i, obj) { 
 

 
    values.push({ 
 
    "label": obj.text, 
 
    "value": obj.id, 
 
    "price": obj.id.split('~')[3] 
 
    }); 
 
}); 
 
console.log(values)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

确保你正在收到有效的json对象/字符串

+0

嗨,我改变了代码,现在我得到这个'TypeError:不能使用'在'运算符搜索'4592'在' – Hane

这是错误的JSON:

{},{}; 

这是正确的JSON:

[{},{}]; 
alert(obj[x].id.split('~')[3])

OR

{}; 

“X” 是不确定的。 把它放在循环可以解决问题:

for(var x = 0; x < obj.length; x++){ 
     alert(obj[x].id); 
     values.push({ 
     "label":obj[x].text, "value":obj[x].id, 
     "price":obj[x].id.split('~')[3] 
     }); 
    } 

的问题是,只是因为obj变量的指标。

所以这里是解决方案:

$.post("items.cfm",{"term":request.term}) 
    .done(function(data){ 
     alert(data); 
     try{ 
      var obj = $.parseJSON(data), 
      values = []; 
      //alert(obj[x].id.split('~')[3]); 
      //this guy is creating the issue. 
      //since he's out of the loop where x is declared(out of scope) 
      //Put it inside the loop and thins will work fine. 

      for(var x = 0; x < obj.length; x++){ 
       alert(obj[x].id.split('~')[3]); //Moved here(x is defined in the for loop)! 
       values.push({ 
       "label":obj[x].text, "value":obj[x].id, 
       "price":obj[x].id.split('~')[3] 
       }); 
      } 
      response(values); 
     } catch(e) { 
      alert(e); 
     } 
}) 

希望这有助于。

在您的代码:

alert(obj[x].id.split('~')[3]); 

此行会导致错误:

x is not defined 

移动这条线成环,使其工作。