Javascript 代码中的JSON解析问题
我正在编写代码,但有点失败:我在JSOnLint.com上检查的JSON响应是有效的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
$.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'