如何在两个变量中分离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($('').text(value).attr('value', value)); }; }); 

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

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

 [{"ID":"AG", "Text":"ANTIGUA AND BARBUDA"},{"ID":"AU", "Text":"Australia"}] 

然后你可以做类似的事情

 $.each( result, function( value ){ $('#country').append( $(" 

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

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

这两种方法都将采用格式良好的JSON字符串,并为您提供一个可以使用的JavaScript对象

如果你使用第二个选项,你可以分割字符串

 var countries = jQuery.parseJSON(json); $.each(countries, function(i, value) { var country = value.split(","); $('#country').append($(' 

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

如果你能做到:

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

然后你可以使用这个:

 success: function( json ) { $.each(json, function(i, value) { $('#country').append($(' 

如果你想这个:

 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($(' 

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