如何使用重复的键动态生成 JSON 对象?

2024-05-14

我知道这听起来不可能,但我的老板告诉我,我必须使用 jQuery 通过 AJAX 后调用发送 JSON,并且必须具有重复的键。问题是,如果我写这样的东西:

$.post("someurl", {
     "key1" : "value1",
     "key2" : "value2",
     "key2" : "value3",
     "key2" : "value4",
     "key3" : "value5"
});

, jQuery 将发送请求为

someurl?key1=value1&key2=value4&key3=value5

所有这一切都是因为 Javascript 会覆盖同名的属性。 JSON 对象是动态生成的,我不允许在其中使用数组。有人可以告诉我如何动态地生成带有重复键的 JSON 对象吗?

我非常感谢您的任何帮助!


据我所见,{"a": "b", "a": "c"}实际上是validJSON 根据RFC 4627 http://www.ietf.org/rfc/rfc4627.txt.

对象结构表示为一对大括号 周围零个或多个名称/值对(或成员)。一个名字是一个 细绳。每个名称后面有一个冒号,用于分隔名称 从价值。单个逗号将值与后面的值分隔开 姓名。对象内的名称SHOULD是独一无二的。

...其中“应该”的意思是:

3. 应该。这个词,或者形容词“推荐”,意思是 在特定情况下可能存在忽略某个问题的正当理由 特定项目,但必须理解其全部含义并 在选择不同的课程之前要仔细权衡。

所以是的,基本上你can这样做,就是legal,但这也是一个坏主意。不同的 JSON 解码器可能会以不同的方式和/或以不良的方式处理这种情况。看看解析器的规范要求:

JSON 解析器将 JSON 文本转换为另一种表示形式。 A JSON解析器MUST接受所有符合 JSON 语法的文本。 JSON 解析器MAY接受非 JSON 形式或扩展。

一个实现may对文本的大小设置限制 接受。一个实现may设置最大深度限制 筑巢。一个实现may对数字范围设置限制。 一个实现may对长度和字符内容设置限制 字符串。

...但是实现并没有have理智地处理这样的情况。例如:

# Python 2.7
>>> import json
>>> json.JSONDecoder().decode('{"a": "b", "a": "c"}')
`{u'a': u'c'}`
# Chrome 32
> JSON.parse('{"a": "b", "a": "c"}')
Object {a: "c"}

...其他实现可能合法地为您提供(以 Python 表示法):

  • 
    {"a": "b"}  
  • 
    [("a", "b"), ("a", "c")]  
  • 
    [("a", ["b", "c"])]  
  • 
    []  
  • 
    42  
  • 
    "your JSON is bad and you should feel bad"  

...或者只是好老鼻恶魔 http://www.catb.org/jargon/html/N/nasal-demons.html。从字面上看,JSON 解析器在这里做的唯一非法的事情就是引发异常。

在生产代码中你最不想做的就是依赖奇怪的副作用。因此,您最不想做的就是行使您的权利来形成名义上合法但实际上无用的 JSON。如果你想这样做,你必须手动完成 - 构建你自己的抽象语法树,你自己的解析器,你自己的生成器,为任何可能想要使用你的数据的人生成的生成器......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用重复的键动态生成 JSON 对象? 的相关文章

随机推荐

  • Dart 流 .asBroadcastStream 内存泄漏

    在我们的 Flutter 应用程序中 我们存在内存泄漏和流未关闭的情况 我们追踪源代码如下 Rx combineLatest asBroadcastStream RxDart的结果 combineLatest 是单订阅流 添加 asBroa
  • 球拍博士中的位图[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 drracket 中的框架 gui 上加载位图 请给出必要的代码和参考文献 我承认 我很难在文档中找到正确的位置来指向您 这是
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 使用 cmd/schtasks 将任务设置为在系统启动时运行

    我对如何使用 schtasks 命令行安排任务在系统启动时作为 SYSTEM 运行有点困惑 我已经阅读了 MS 关于 schtasks exe 的文档 这里有人可以帮助我吗 以下命令安排 MyApp 程序从 2001 年 3 月 15 日开
  • Spring Oauth2 使用 Spring Boot 2.0 返回 401 Unauthorized 错误

    我正在尝试使用 spring oauth2 实现 SSO 对于 spring 1 5 x 它工作得很好 但是 一旦我将 oauth 服务器应用程序升级到 spring boot 2 2 3 RELEASE 我什至无法进入登录表单 即将 ht
  • 根据不平凡的标准有效合并两个数据帧

    正在接听这个问题 https stackoverflow com questions 18821862 data selection error 18823432 18823432昨晚 我花了一个小时试图找到一个没有增长的解决方案data
  • 消息框按钮文本

    我环顾四周 似乎所有内容都可以在消息框中编辑 禁止按钮上的文本 WPF http en wikipedia org wiki Windows Presentation Foundation C MessageBox Show Generic
  • 链接异常的实现是如何工作的?

    我之前问过一个question https stackoverflow com questions 3543725 should exceptions be chained in c关于如何在 C 中链接异常 其中一个答案为如何完成它提供了
  • “源兼容性”和“目标兼容性”有什么区别?

    之间有什么关系 区别sourceCompatibility and targetCompatibility 当它们设置为不同的值时会发生什么 根据工具链和兼容性 https docs gradle org current userguide
  • 带有右侧固定侧边栏的 Bootstrap 响应式网格

    我想创建一个带有类似引导程序的模板 它尊重网格的响应系统 在图中 导航栏和右侧 包含两个按钮 是粘性的 始终显示在视图上 我的问题是右侧 因为在引导网格系统中 右侧块将被视为单行 而主要内容包含多行 我怎样才能做到这一点 围绕整个 Boot
  • SQL 事务如何工作?

    我从事 SQL 工作的时间并不长 但我想我明白 通过将 SQL 语句包装在事务中 所有语句都会完成 或者都不会完成 这是我的问题 我有一个包含 lineitem 集合的订单对象 行项目在 order OrderId 上相关 我已经证实所有
  • 如何将 NSDate 转换为 NSString?

    我想将 NSDate 转换为 NSString 这怎么可能 我尝试了这个 但它不起作用 它正在生成异常 NSString dateToString NSString alloc initWithFormat NSString dateObj
  • 如何用纯JavaScript控制变换距离

    我做的http codepen io adamchenwei pen dOvJNX http codepen io adamchenwei pen dOvJNX 我尝试对 dom 应用某种移动方式 使其移动固定距离并停止 而不是动画并移动穿
  • 通过应用程序组在应用程序之间通信和保存数据

    iOS 8 昨天发布了一个有关应用程序组的新 API 以前在应用程序之间共享数据和通信有点混乱 我相信这正是应用程序组旨在纠正的问题 在我的应用程序中 我启用了应用程序组并添加了一个新组 但我找不到任何有关如何使用它的文档 文档和 API
  • 在 R 中按组检查重叠开始和结束时间

    我想检查数据的重叠 这是数据 ID lt c rep 1 3 rep 3 5 rep 4 4 rep 5 5 Begin lt c 0 2 5 3 7 8 7 25 25 10 15 17 20 1 NA 10 11 13 End lt c
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • 如何延迟 AngularJS 应用程序初始化?

    我有一些数据正在后台异步处理 并且希望延迟整个 AngularJS 应用程序的初始化 直到完成 BackgroundData initialized 是一个 Q 承诺 所以像这样 BackgroundData initialized the
  • 在 Rails 6 上定义 Secret_key_base 的正确方法是什么?

    正确的定义方式是什么secret key base既然我们已经有了每个环境的凭据 就可以在 Rails 6 上使用了吗 我的环境有变量SECRET KEY BASE但 Rails 并没有接受它 我尝试定义secret key base in
  • 如何确定 Keras Conv2D 函数中的“filter”参数

    我刚刚开始我的 ML 之旅 并且已经完成了一些教程 对我而言 不清楚的一件事是如何为 Keras Conv2D 确定 过滤器 参数 我读过的大多数资料只是将参数设置为 32 没有任何解释 这只是经验法则还是输入图像的尺寸起作用 例如 CIF
  • 如何使用重复的键动态生成 JSON 对象?

    我知道这听起来不可能 但我的老板告诉我 我必须使用 jQuery 通过 AJAX 后调用发送 JSON 并且必须具有重复的键 问题是 如果我写这样的东西 post someurl key1 value1 key2 value2 key2 v