【问题标题】:How to create a JSON object with duplicate keys [duplicate]如何创建具有重复键的 JSON 对象 [重复]
【发布时间】:2015-04-27 20:55:42
【问题描述】:

我正在做一个 SailsJS 项目,我需要创建一个 json 对象以使我的 ORM 搜索工作,这就是应该执行搜索的方式

Venue.find({
            is_published: true,
            restaurant_services: {
                contains: '"delivery":"1"',
                contains: '"takeout":"1"'
            },
            restaurant_specialties: {
                contains: '"breakfast":"1"',
            }
        }).exec

因此,您可能会看到 Find() 中的 JSON 对象是 O 需要创建的对象,并且其中的值具有重复的键。

【问题讨论】:

  • 如果你想要那种格式,contains 键不应该是一个对象吗?
  • 那不是 JSON。那是一个 javascript 对象文字。 JSON 只是一种序列化格式。您正在处理的是一个基本的 javascript 问题,它有两个同名的属性。您是否考虑过将数据结构更改为 restaurant_services: { contains: ['"delivery":"1"', '"takeout":"1"'] }

标签: javascript node.js sails.js waterline


【解决方案1】:

你不能。你应该尝试使用这样的东西:

Venue.find({
            is_published: true,
            restaurant_services: {
                contains:  ['"delivery":"1"','"takeout":"1"']
            },
            restaurant_specialties: {
                contains: [ '"breakfast":"1"' ]
            }
        }).exec

或者这个:

Venue.find({
            is_published: true,
            restaurant_services: {
                contains: {"delivery":"1","takeout":"1"}
            },
            restaurant_specialties: {
                contains: { "breakfast":"1" }
            }
        }).exec

【讨论】:

  • 应该是contains: ['"delivery":"1"','"takeout":"1"'],因为这是一个数组,而不是一个对象。当然,除非' 被取消。
  • 这是我的第一个想法。然后,我想为什么不让它成为一个对象呢?但你是对的,' 应该是一个数组。
【解决方案2】:

问题是 {... } Jason 代表一个地图,因此不能有重复的键。虽然重复键严格来说不是语法错误,但它们也不会像预期的那样在浏览器或 json 库中工作。如果您无法更改 json 对象的语法,那么您将不得不通过字符串连接而不是正常的 Javascript 类型方法来生成该 json。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2023-03-04
    • 1970-01-01
    • 2014-04-28
    相关资源
    最近更新 更多