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 消息?的主要内容,如果未能解决你的问题,请参考以下文章