如何从数组中获取json
Posted
技术标签:
【中文标题】如何从数组中获取json【英文标题】:how to get json from a array 【发布时间】:2012-08-13 12:02:53 【问题描述】:我想知道如何正确地从以下 json 返回数据:假装我有一个 url http://test.com/tesdata,它给了我以下数据:
["Identifier":1, "Name":"Test",
"Identifier":2, "Name":"Test",
"Identifier":3, "Name":"Test"]
所以我做了以下操作以在 div 中获取这些数据:
$.ajax(
type: 'GET',
url: 'http://notgiven',
data: get_param: 'value' ,
dataType: 'json',
success: function (data)
alert("s");
$.each(data, function(index, element)
$('.result').append("a");
);
,
error: function(jqXHR, textStatus, errorThrown)
alert("jqXHR: " + JSON.stringify(jqXHR));
alert("textStatus: " + JSON.stringify(textStatus));
alert("errorThrown: " + JSON.stringify(errorThrown));
);
我得到以下错误无法解析 Json 字符串
【问题讨论】:
你走了多远?错误发生在哪里? 测试:element.Identifier+' '+element.Name
数组中多了一个
。
可能是跨域错误。添加错误回调并使用console.log(jqXHR, textStatus, errorThrown);
记录它我很确定您也可以访问xcode 中的日志消息。你是用模拟器测试的吗?一旦部署 phonegap 应该可以解决任何跨源问题。
@bdz 您忘记了逗号 => working fiddle 您看到它由于跨域问题而无法正常工作。 (及其虚拟网址)遗憾的是,您无法捕获这些错误,只能在控制台中看到它们..(至少我还不能)
【参考方案1】:
试试这个:
// create empty object
var json = ;
$.each(data, function(index, element)
// for each element, create empty object
json[index] = ;
// map response data to new json object
json[index]['id'] = element.Identifier;
json[index]['name'] = element.Name;
);
json
变量现在包含 json 格式 方便地存储在 javascript 对象中的所有信息 :)
在您的示例中,这意味着:
$.ajax(
type: 'GET',
url: 'http://test.com/tesdata',
data: get_param: 'value' ,
dataType: 'json',
success: function (data)
var json = ;
$.each(data, function(index, element)
json[index] = ;
json[index]['id'] = element.Identifier;
json[index]['name'] = element.Name;
// don't know exactly what you try to do here, but let's append this data to '.result'
$('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>");
);
);
请注意,如果您只想将此值附加到某个 div,则无需进行整个 json 转换。在这种情况下,您可以这样做
success: function (data)
$.each(data, function(index, element)
$('.result').append("<span id='" + element.Identifier + "'>" + element.Name + "</span>");
);
【讨论】:
@frankblizzard 有什么附加价值?您将对象数组转换为具有对象的对象。不知道你想用这个实现什么,除了混乱......最后一部分是正确的,但这几乎就是他正在做的事情。另请注意,JSON 是字符串格式。一旦进入数据变量,它就已经被解析了,所以它只是 js 对象。字符串[1,2,3]
与字符串 "a": 1, "b": 2, "c": 3
一样多的 json 格式,第一个只是一个数组,最后一个是对象。您所谓的“json 格式”实际上只是一个 javascript 对象。所以你可能想编辑你的答案:)【参考方案2】:
正如我在 cmets 中所建议的,这可能是一个跨域问题。您不能访问来自不同来源的数据/脚本,这意味着相同的协议 (http/https) 相同的域 (mydomain.com) 相同的端口(通常省略默认为:80)
So origin of: http://localhost:8080/data != https://localhost:8080/data
origin of: http://mydomain.org/data != http://localhost/data
origin of: http://mydomain.org/data != http://localhost/data
origin of: http://localhost/data == http://local
主机/其他东西
我仍然不能 100% 确定。但解决问题的第一步是正确调试。
可以debug using xcode 但如果你想尝试没有。定义一个错误处理程序。 (check this fiddle)
您会发现它由于跨域问题而无法正常工作。 (及其虚拟网址)遗憾的是,您无法捕获那些跨源错误。您只能在控制台中看到它们..(至少我还不能)
但现在好消息!
PhoneGap 应用不限于跨域策略!因此,如果部署,问题应该得到解决。
如果您可以访问后端,我也可以轻松解决此问题。您应该将Access-Control-Allow-Origin: *
标头设置为enable CORS(跨源资源共享)
注意:对于开发,这应该不是问题,对于生产,我建议设置一个固定的 url,或者如果不需要,请将其删除。
编辑: 所以这不是跨源问题。正如错误所说:无法解析Json字符串
因此,您检查 jqXHR 响应中的内容。查看原始数据verify if it's valid。 95% 的可能性不是因为我最好的选择是 jquery json-parser 非常可靠。
【讨论】:
【参考方案3】:在使用js对json数据进行任何操作之前,需要调用JSON.parse函数。
$.ajax(
type: 'GET',
url: 'http://test.com/tesdata',
data: get_param: 'value' ,
dataType: 'json',
success: function (data)
var items = JSON.parse(data);
$.each(items, function(index, element)
$('.result').append(element.Id + " " + element.Name);
);
);
对于 IE 6 和 7,您必须包含 json2.js 文件以支持 JSON.parse 函数。
【讨论】:
dataType
向 jQuery 明确指定在将响应交给您之前应将其解析为 JSON。另外,jQuery 有 $.parseJSON
所以不需要 json2.js以上是关于如何从数组中获取json的主要内容,如果未能解决你的问题,请参考以下文章
C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]