如何在两个变量中分离json响应?

时间:2011-05-08 02:29:34

标签: jquery json

现在json响应看起来像

["AG","ANTIGUA AND BARBUDA","AU","AUSTRALIA","BR","BRAZIL","CA","CANADA"] 

我可以成功

["AG,ANTIGUA AND BARBUDA","AU,AUSTRALIA","BR,BRAZIL","CA,CANADA"]

如果更容易使用或任何其他风格。

我需要的是将它分成两个变量,一个用于县代码,另一个用于国家名称

   ...success: function( json ) {
    $.each(json, function(i, value) {
          $('#country').append($('<option>').text(value).attr('value', value));
    };  
      });

现在同一个变量值和选项名称我需要将国家/地区代码放在选项中,将国家/地区名称放在变量中。

4 个答案:

答案 0 :(得分:4)

为什么不首先将它们作为JSON对象返回?像

这样的东西
[{"ID":"AG", "Text":"ANTIGUA AND BARBUDA"},{"ID":"AU", "Text":"Australia"}]

然后你可以做类似

的事情
$.each( result, function( value ){
    $('#country').append(
        $("<option>").text(value.Text).attr("value", value.Text)
    );
});

修改 上面的代码假设您已经将从服务器发送的数据转换为JavaScript数组。有两种方法可以解决这个问题:

  1. 您可以使用getJSON方法请求数据,jQuery将为您解析返回值
  2. 您可以使用parseJSON
  3. 自行解析数据

    任何一种方法都会采用格式良好的JSON字符串并返回一个JavaScript对象来处理

答案 1 :(得分:1)

如果您选择第二个选项,可以split字符串

var countries = jQuery.parseJSON(json);
$.each(countries, function(i, value) {
    var country = value.split(",");
    $('#country').append($('<option>').text(country[1]).attr('value', country[0]));

};

编辑:您需要首先解析JSON字符串,这样您就可以使用Array对象并循环遍历它。请参阅上面的更新代码。

答案 2 :(得分:0)

如果你能做到:

[["AG","ANTIGUA AND BARBUDA"],["AU","AUSTRALIA"],["BR","BRAZIL"],["CA","CANADA"]] 

然后你可以用这个:

success: function( json ) {
  $.each(json, function(i, value) {
    $('#country').append($('<option>').text(value[1]).attr('value', value[0]));
  };  
});

答案 3 :(得分:0)

如果你想这样做:

var array = ["AG","ANTIGUA AND BARBUDA","AU","AUSTRALIA","BR","BRAZIL","CA","CANADA"];

并使其成为键/值对对象的数组,您可以执行以下操作:

result = [];

for (var i = 0; i < array.length; i = i + 2) {
  result.push({ array[i] : array[i + 1]});
}

您最终会在result中找到相应的内容:

result = [
  { "AG" : "ANTIGUA AND BARBUDA" },
  { "AU" : "AUSTRALIA" },
  { "BR" : "BRAZIL" },
  { "CA" : "CANADA" }
];

更新:如果您只关心将其添加到选择中,您可以这样做:

var array = ["AG","ANTIGUA AND BARBUDA","AU","AUSTRALIA","BR","BRAZIL","CA","CANADA"];

for (var i = 0; i < array.length; i = i + 2) {
  // Using this object initializer to build the options has a caching benefit.
  $('#country').append($('<option>', {
    value: array[i],
    text: array[i + 1]
  }));
}

对于它的价值,在这种情况下可能可以忽略不计,但这种方法相对较慢。如果您发现性能问题,请考虑使用.detach()方法在添加选项时将#country拉出DOM,然后在最后附加回来。