如何从数组中获取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的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中获取json

C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]

如何从 JSON 数组 SwiftyJSON 中获取数据?

JQuery如何从JSON数组中获取完整数据

如何从 JSON 数组中的 JSON 对象中的单个值获取数据?

如何从 JSON 数组中获取字符串数组? [关闭]