JSON解析多个键

我有以下JSON字符串。

var jsonString = '{"J":4,"0":"M", "J":5,"0":"N"}' 

如果我使用jquery.parseJSON(jsonString)解析它,我得到

 {"J":5,"0":"N"} 

问题

1)jsonString格式错误吗?

2)是否有另一种jquery方法可用于包含具有重复键的对象,即

 jquery.someAwesomeMethod(jsonString) => {"J":4,"0":"M", "J":5,"0":"N"} 

直接回答您的问题:

 1) Is jsonString malformed? 

它实际上可能是合法的JSON(我不完全确定),但在任何类型的javascript上下文中使用时, jquery.parseJSON由于重复键而使用任何javascript JSON解析器(如jquery.parseJSON进行解析时,它将不实用。

 2) Is there another jquery method I can use to include objects with duplicate keys, ie jquery.someAwesomeMethod(jsonString) => {"J":4,"0":"M", "J":5,"0":"N"} 

,没有这样的jQuery方法,因为jQuery没有这个,因为你想要的输出在javascript中是不可能的。 您已经表示了Javascript对象语法,但Javascript对象不支持重复键。 在Javascript中,为给定键设置的最后一个值获胜。

因此,如果您打算将JSON解析为普通的javascript对象(如何在浏览器应用程序中使用JSON以及如何使用jquery.parseJSON()解析它),则不会获得具有该类型数据声明的重复键以后声明相同的密钥可能只会取代早期的声明 – 只有一个会存活下来。

您可能需要一些不同类型的数据结构,例如数组或具有键的数组值的对象:

这是一个数组,它只是成对地在键和值之间交替:

 [ "J", 4, "0","M", "J", 5, "0","N" ] obj[0] // key obj[1] // corresponding value 

访问数组时,偶数索引将是键,奇数索引将是值。

或者这里是一个值为数组的对象,因此每个键可以有多个值:

 {"J":[4, 5], "0":["M", "N"]} typeof obj["J"] // Array obj["J"].length // array of length == 2 obj["J"][0] // first value in array == 4 obj["J"][1] // second value in array == 5 

每个键都包含一组值。

JSON字符串的每个键必须是唯一的 ,否则当您将其解析为javascript对象时,它将被最新的键实例覆盖。

JSON是Javascript(ECMAScript)的子集,Javascript中的对象文字被评估为对象创建,后跟属性赋值,因此允许重复的属性名称,但最后一个重复项覆盖前一个。

此外,如果您要在Javascript中解析对象的JSON表示并保留重复的名称,则需要将结果表示为Javascript对象以外的其他内容,这将是不切实际的。