1

我有两种形式的相同 json 数据 - 一种是单行的,第二种只是格式化输出。JSON A:

{"id":1, "name":"BoxH", "readOnly":true, "children":[{ "id":100, "name":"Box1", "readOnly":true, "children":[ { "id":1003, "name":"Box2", "children":[ { "id":1019, "name":"BoxDet", "Ids":[ "ABC", "ABC2", "DEF2", "DEFHD", "LKK" ]}]}]}]}

和 JSON B:

{
   "id":1,
   "name":"BoxH",
   "readOnly":true,
   "children":[
      {
         "id":100,
         "name":"Box1",
         "readOnly":true,
         "children":[
            {
               "id":1003,
               "name":"Box2",
               "children":[
                  {
                     "id":1019,
                     "name":"BoxDet",
                     "Ids":[
                        "ABC",
                        "ABC2",
                        "DEF2",
                        "DEFHD",
                        "LKK"
                        ]
                    }
                ]
            }
        ]
    }
    ]
}

为什么会这样,代码:

import json

if open('input_file.json'):
    output_json = json.load('input_file.json')

万一A抛出

ValueError: No JSON object could be decoded

并且案例 B 工作正常。我只是想知道为什么会这样?我认为 json.load 的 JSON A 和 JSON B 是相同的。我应该怎么做才能使这两种情况都起作用?

4

2 回答 2

6

json.load接受一个文件对象(不是文件路径)。你应该保留文件参考。尝试以下操作:

import json

with open('input_file.json') as f:
    output_json = json.load(f)

或者,您可以使用json.loadswhich 接受序列化的 json 字符串:

import json

with open('input_file.json') as f:
    output_json = json.loads(f.read())
于 2013-09-17T14:24:42.617 回答
0

在我的情况下,编码确实存在问题。一旦我将单行文件转换为没有 BOM 的 UTF-8,它就开始工作而没有任何问题。之前的编码是ANSI。所以.. 教训:检查文件编码。

于 2013-09-26T15:09:22.700 回答