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
你不应该分析它,因为它的阵列。 另外,您在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对象/字符串
嗨,我改变了代码,现在我得到这个'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
移动这条线成环,使其工作。
您有两个JSON对象,而不是一个。因此,将它们视为两个不同的对象,或将它们组合为另一个对象的数组或内部对象。而且,你为什么要解析?它已经是JSON了,不是吗? – RaR
你的try里面有多少'console.log(obj)'返回? –