我有一个这样的字符串:
string = '{ "key": [
{ "foo": "bar" }
] }';
通过执行
将此字符串转换为JSON对象json = $.parseJSON(string);
然后它看起来像这样:
{ "key":
{ "0":
{ "foo": "bar" }
}
}
所以似乎数组被转换为哈希。
期望的结果将是:
{ "key": [
{ "foo": "bar" }
] }
实现这一目标的最佳方法是什么?背景:我将JSON数据发布到URL,但需要数组保持不变,以便收件人可以相应地解析它。
更新
以下是我在Chrome 37.0.2062.120和jQuery 1.11.1的控制台中看到的内容:
它看起来像一个数组,但实际上只是另一个键为“0”的哈希。或者我得错了什么?
更新2
将字符串转换为JSON更新后,我将其发布到网址:
$.ajax({
url: 'http://test.com',
data: json,
dataType: 'jsonp',
type: 'post'
})
以
的形式到达{ "key":
{ "0":
{ "foo": "bar" }
}
}
答案 0 :(得分:2)
发送AJAX时,您可以自己编码JSON
对于JSONP,请使用
var json = '{ "key": [ { "foo": "bar" }] }';
var jsObj = $.parseJSON(json);
$.ajax({
url: 'http://test.com',
// You have to convert your JS object into a JSON string on your own
// jQuery will convert them into form encoded values if you leave it as an object
// But you want to send your whole JSON as one of the keys,
// so do use an object around your json to specify the the name of the
// key value pair containing the JSON
data: {myKey: JSON.stringify(jsObj)},
dataType: 'jsonp',
// The answer at http://stackoverflow.com/questions/6410810/rails-not-decoding-json-from-jquery-correctly-array-becoming-a-hash-with-intege
// suggests you may need this for Rails to understand it
contentType: 'application/json'
// type can't be post for JSONP
// type: 'post'
})
对于POST,请使用
$.ajax({
url: '/my/url/',
// For POST, you can post the entire string, converting it on your own
data: JSON.stringify(jsObj),
type: 'POST'
})
答案 1 :(得分:1)
在Javascript中,一切都是键和值的哈希值,这就是为什么你看到Arrays的哈希值,索引为hash键,值为object。
这适合我。
var jsonStr = '{ "key": [{ "foo": "bar" }] }';
var obj = $.parseJSON(jsonStr);
if (obj.key instanceof Array) {
alert('value is Array! and its length is > '+obj.key.length);
} else {
alert('Not an array');
}
答案 2 :(得分:0)
一方面,所有这些都需要用括号括起来
string = '{"key": [
{ "foo": "bar" }
]}';
让jQuery用jQuery.parseJSON(string)
它包含在一个数组中,这就是你得到一个数组的原因。我猜这里,但你真正想要的是:
string = '{"key":
{ "foo": "bar" }
}';
这样您只需按array['key']['foo']
即可访问“栏”?如果是,请删除这些括号。