jquery/ajax - 如何使用重复键迭代 json 消息?

Posted

技术标签:

【中文标题】jquery/ajax - 如何使用重复键迭代 json 消息?【英文标题】:jquery/ajax - how to iterate through a json message with duplicate keys? 【发布时间】:2021-11-07 18:25:08 【问题描述】:

我的 ajax 发布请求收到一条消息,其中包含要显示的值。此 json 响应消息如下所示:


    "line": 
        "name": "Google item",
        "images": 
            "element": 
                "order": "1",
                "link": "https://google.com/1.jpg",
                "name": "1.jpg"
            ,
            "element": 
                "order": "2",
                "link": "https://google.com/2.jpg",
                "name": "2.jpg"
            ,
            "element": 
                "order": "3",
                "link": "https://google.com/3.jpg",
                "name": "3.jpg"
            ,
            "element": 
                "order": "4",
                "link": "https://google.com/4.jpg",
                "name": "4.jpg"
            ,
            "element": 
                "order": "5",
                "link": "https://google.com/5.jpg",
                "name": "5.jpg"
            
        ,
        "features": 
            "element": 
                "name": "1",
                "order": "1"
            ,
            "element": 
                "name": "2",
                "order": "2"
            ,
            "element": 
                "name": "3",
                "order": "3"
            ,
            "element": 
                "name": "4",
                "order": "4"
            
        ,
        "purchasing_price": "10",
        "selling_price": "20",
        "ftp_path": "google/item",
        "description": ""
    

我正在开发中,对 jquery/ajax 中的 json 没有太多经验。 我试过这个:

function parseContent(content)
    $("#name").val(content.line.name);
    $("#ftp_path").val(content.line.ftp_path);
    $("#html_description").val(content.line.description);

    $("#feature").remove();
    $.each(content.line.features, function(k, v)
        $("#features").append('<input type="text" class="form-control mt-3" id="feature" value="' + v.name + '" required>');
        alert(v.name );  
    );

我的问题是,变量内容只包含最后一个图像和特征元素。但在 chrome/network 中我可以看到,完整的消息已经收到。

所以我发现有一个解析问题:Parsed JSON contains only the last element。

但是在我的情况下,我该如何解决这个问题,以遍历所有元素?

【问题讨论】:

【参考方案1】:

JSON specification 说:

对象中的名称应该是唯一的。

这些对象中的名称不是。

SHOULD 表示:

那里 在特定情况下可能存在忽略 特定项目,但必须了解全部含义并 在选择不同的课程之前仔细权衡。

这里的含义是每个 JSON 解析器(至少我知道)都会忽略对象中除一个具有重复名称的值之外的所有值。

如果您真的需要处理这些数据,那么您将不得不找到一个可以处理它的解析器(我不知道有)或者编写一个可以处理它的自定义 JSON 解析器(您还将需要决定要从中生成什么数据结构,因为 JS 也不能在对象中具有重复的属性名称)。 There are a number of JSON parsers on npm 你可能想检查源代码作为起点。

更好的解决方案是更改生成源数据的任何内容,以生成不违反 SHOULD 要求的合理格式。例如用数组替换重复的属性名称。

【讨论】:

以上是关于jquery/ajax - 如何使用重复键迭代 json 消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Jquery/AJAX 上传文件 [重复]

如何使用 jQuery AJAX 和 PHP 数组返回 [重复]

如何使用jquery ajax检查或不检查复选框[重复]

如何迭代由json对象中的键访问的数组[重复]

重复 jQuery ajax 调用

如何使用迭代器嵌套循环?