JSON中的重复关键字值

JSON中的重复关键字值,json,language-agnostic,parsing,Json,Language Agnostic,Parsing,关于JSON表示的基本数据结构,如下所示 名称/值对的集合,以及 值的有序列表 我无法找到与已解析到当前对象中的成员同名的第二个成员是否应该(a)引发异常或(b)替换现有成员 这是指定的地方吗 现有解析器如何处理重复的名称 编辑:我希望为我的解析器定义正确的行为。因为JSON只是Javascript的一个子集,它在很大程度上取决于Javascript规范。我个人不知道答案是什么,但如果可能的话,我强烈建议不要依赖该行为。语法分析器找到的姓氏将替换为新的姓氏。它不会带来期待 这只是一个Javasc

关于JSON表示的基本数据结构,如下所示

  • 名称/值对的集合,以及
  • 值的有序列表
  • 我无法找到与已解析到当前对象中的成员同名的第二个成员是否应该(a)引发异常或(b)替换现有成员

    这是指定的地方吗

    现有解析器如何处理重复的名称


    编辑:我希望为我的解析器定义正确的行为。

    因为JSON只是Javascript的一个子集,它在很大程度上取决于Javascript规范。我个人不知道答案是什么,但如果可能的话,我强烈建议不要依赖该行为。

    语法分析器找到的姓氏将替换为新的姓氏。它不会带来期待

    这只是一个Javascript语法问题

    var json = {};
    
    // lets augment the object
    json.one = 1;
    json.one = 2; // it gets replaced
    

    JSON只是JavaScript的对象文字符号的一个子集,因此受相同规则的约束-重复键的最新值将覆盖特定对象中该键先前分配的任何值。从为对象属性赋值的角度考虑;以后的分配将覆盖以前的分配

    为了证明这一点,我设置了一个。代码显示在页面上,可以看到,messagebox中有名称“Barney”

    代码在这里-

    $(function() {
    
        $('#myButton').click(function(e) 
    
        {
    
        var myJsonString =  "Person = {'firstName':'Fred','lastName':'Flintstone','firstName':'Barney'}";
    
        eval("(" + myJsonString + ")");
    
        alert(Person.firstName);
    
        });
    
    });
    

    顺便说一下,为了便于使用,我在这里使用了eval()。由于安全问题,我建议使用JSON解析器而不是eval()。

    我非常确定您列出的两种行为都会被接受,以及其他行为(使用第一种,使用任意一种)。:-) 也就是说,JSON规范POV中没有定义这种行为

    实际上,我使用的实现可以执行您提到的建议之一,或者“使用第一个”


    因此,如果工具可以选择做什么,我不会指望具体的行为。

    我同意不使用eval()。实际上,我在Java中使用JSON,因此纯粹是作为数据封装,不包括code.BTW,感谢您的出色响应;我感到内疚,因为我自己没有想到简单地在JS中测试这个。。。我想,几乎完全用Java编程的问题。没问题。我强烈建议您测试HTML、CSS和JavaScript代码片段。它允许您轻松地包含公共JS库,并将代码保存到公共URL。与firefox相结合,这绝对是一个测试想法的宝库。是的,我最终让我的解析器抛出一个异常,作为默认行为,但我添加了一个解析选项,将重复的关键字视为一个数组;我正在考虑一个替代选项来规定替换行为。什么不会引发异常?OP没有指定工具。你是说Javascript不会抛出异常吗?