Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Javascript 代码中的JSON解析问题_Javascript_Jquery_Json - Fatal编程技术网

Javascript 代码中的JSON解析问题

Javascript 代码中的JSON解析问题,javascript,jquery,json,Javascript,Jquery,Json,我正在编写代码,但有点失败:我在JSOnLint.com上检查的JSON响应是有效的JSON 这是一段制造麻烦的代码 $.post(“items.cfm”,“term”:request.term}) .完成(功能(数据){ 警报(数据); 试一试{ var obj=$.parseJSON(数据), 值=[]; 警报(obj[x].id.split('~')[3]); 对于(变量x=0;x

我正在编写代码,但有点失败:我在JSOnLint.com上检查的JSON响应是有效的JSON

这是一段制造麻烦的代码

$.post(“items.cfm”,“term”:request.term})
.完成(功能(数据){
警报(数据);
试一试{
var obj=$.parseJSON(数据),
值=[];
警报(obj[x].id.split('~')[3]);
对于(变量x=0;x
如果我用以下内容启动JSON:

{
“文本”:“蓝色CPR口袋面罩”,
“id”:“12817700003239005~蓝色~是~10.75”
}, {
“文本”:“心肺复苏面罩”,
“id”:“128177000000138987~CPs~YES~41.83”
}
…它抛出一个错误:

x is not defined  
SyntaxError:意外标记,在JSON中的位置

…但如果我从以下几点开始:

[{
        "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 

您不应该解析它,因为它位于数组中。 此外,在警报函数中使用的变量“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()
var数据=[{
“文本”:“蓝色CPR口袋面罩”,
“id”:“12817700000323900”
},
{
“文本”:“心肺复苏面罩”,
“id”:“128177000000138987”
}
]
函数test1(){
var obj=数据
值=[];
控制台日志(obj)
对于(变量x=0;x
尝试使用each循环,如果您有[],那么json是有效的,因为您有多个需要在一个数组中的对象

var数据=[{
“文本”:“蓝色CPR口袋面罩”,
“id”:“12817700003239005~蓝色~是~10.75”
}, {
“文本”:“心肺复苏面罩”,
“id”:“128177000000138987~CPs~YES~41.83”
}];
var值=[];
$。每个(数据、功能(i、obj){
值。推({
“标签”:obj.text,
“值”:对象id,
“价格”:对象id.split(“~”)[3]
});
});
console.log(值)
这是错误的JSON:

{},{};
没错:

[{},{}];

警报(obj[x].id.split(“~”)[3])
中的“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]
      });
  }
for(变量x=0;x
问题仅仅是因为
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);
        }
})
$.post(“items.cfm”,“term”:request.term})
.完成(功能(数据){
警报(数据);
试一试{
var obj=$.parseJSON(数据),
值=[];
//警报(obj[x].id.split('~')[3]);
//这家伙在制造问题。
//因为他在声明x的循环之外(超出范围)
//把它放在环里,这样就可以了。
对于(变量x=0;x
希望这有帮助。

在您的代码中:

alert(obj[x].id.split('~')[3]);  
这一行导致一个错误:

x is not defined  

将此行移动到for循环中,使其工作

您有两个JSON对象,而不是一个。因此,将它们视为两个不同的对象,或者将它们组合为另一个对象的数组或内部对象。此外,为什么要解析?它已经是JSON了,不是吗?try return中的
console.log(obj)
有什么作用?您好,我更改了代码,现在我得到了这个
TypeError:无法使用'in'运算符在中搜索'4592'