【问题标题】:is null row allowed in jsonjson 中是否允许空行
【发布时间】:2013-12-12 19:09:07
【问题描述】:

我有一个 json:

[
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName": "Jones" }
]

我知道用null 设置值是可以接受的:

[
{ "firstName":"John" , "lastName":null},
{ "firstName":"Anna" , "lastName":null },
{ "firstName":"Peter" , "lastName": null }
]

但我想知道是否有空/空行选项。喜欢

[
{ "firstName":"John" , "lastName":"Doe" },
null,
{ "firstName":"Anna" , "lastName":"Smith" },
null,
{ "firstName":"Peter" , "lastName": "Jones" },
null
]

虽然我不知道 JSON 格式是否允许空行,但我只想知道,如果允许,那么如何迭代该 json 对象。没有空行很容易在任何语言中进行迭代,但是如果我们有空行怎么办?

询问这个空行的主要目的是:我将 JSON 转换为 HTML 表,而 HTML 表确实包含空行。 json2html

虽然我正在研究 python,但也可以接受 JS/Javascript 中的答案

【问题讨论】:

  • 有趣的问题。虽然我想知道在哪种情况下使用空行实际上是有意义的。
  • 实际上我遇到了许多包含空行的 JSON 文件,正如我提到的,我一直在开发 JSON 到 HTML 转换 webapp,我想知道空行是否被实际接受,以便我添加它的支持尽管我已经添加了对空值的支持,但在我的 web 应用程序中也是如此。
  • 我不怀疑它的存在。我只是想知道,为什么。

标签: json loops python-2.7


【解决方案1】:

是的,JSON 列表中允许混合类型。这是一些python证明:

>>> import json
>>> data = json.loads("""[
    { "firstName":"John" , "lastName":"Doe" },
    null,
    { "firstName":"Anna" , "lastName":"Smith" },
    null,
    { "firstName":"Peter" , "lastName": "Jones" },
    null
]""")
[{u'lastName': u'Doe', u'firstName': u'John'}, None, {u'lastName': u'Smith', u'firstName': u'Anna'}, None, {u'lastName': u'Jones', u'firstName': u'Peter'}, None]

在此示例中,您创建了一个包含混合类型行的 JSON 数组,这是允许的。第一个条目是一个 JSON 对象,然后是一个 None,然后是另一个 JSON 对象,依此类推。

更新:以下是在处理 None 条目时如何迭代此列表的方法

>>> for result in data:
...     # Here, we get either a dictionary or a `None`
...     if result:  # Filter out the `None` rows. You could also do a isinstance(result, (dict)) if you're paranoid
...         for key, value in result.iteritems():
...             print key, value

lastName Doe
firstName John
lastName Smith
firstName Anna
lastName Jones
firstName Peter

【讨论】:

  • 谢谢@VooDooNOFX,你能告诉我如何迭代(for循环作为键值)这个json来提取数据。我的意思是我尝试迭代,但由于null 连续抛出异常。 null row 的处理方法是什么?
  • @softvar:请参阅编辑以了解如何正确迭代集合。
【解决方案2】:

jsonlint 中,以下 JSON 是有效的。所以我认为 null 是允许的。

[
    {
        "firstName": "John",
        "lastName": "Doe"
    },
    null,
    {
        "firstName": "Anna",
        "lastName": "Smith"
    },
    null,
    {
        "firstName": "Peter",
        "lastName": "Jones"
    },
    null
]

但以下 JSON 无效

[
    {
        "firstName": "John",
        "lastName": "Doe"
    },
    null,
    {
        "firstName": "Anna",
        "lastName": "Smith"
    },
    null,
    {
        "firstName": "Peter",
        "lastName": "Jones"
    },
    {
        null: null
    },
    null
]

错误是

Parse error on line 16:
...   },    {        null: null    },  
---------------------^
Expecting 'STRING', '}'

【讨论】:

  • 所以你的意思是 null 行在 Pure JSON 中是允许的?
  • 我认为它是“null as a row is allowed”
  • 如何遍历包含null as a row的JSON?由于这个问题,我遇到了问题 - for key, value in obj stuff
猜你喜欢
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多