格式化大量JSON

时间:2014-05-16 18:05:39

标签: python json xcode formatting

我已成功从我学校的课程注册系统中删除了一兆字节的数据。我构建了一个对象图,然后将其保存为JSON。

Python在一个文件中给了我一个巨大的JSON字符串,我希望用文本编辑器很好地格式化它。我想如果我在Xcode中打开并用换行符+逗号替换逗号,我就会回家。然后我可以点击control + i,然后Xcode会缩进给我。

搜索和替换,缩进和语法突出显示所有似乎都在任意中​​断某处。我怀疑JSON格式不正确,但数据足够大,我不能简单地解决问题并自己调整一些东西。

我正在使用以下代码编写数据:

file_object = open(file_name,'wb')

json_data = jsonpickle.encode(data)

file_object.write(json_data)

知道如何诊断问题,或问题是什么?

4 个答案:

答案 0 :(得分:1)

请注意,json dumping有一个缩进参数。

>>> print json.dumps({"a": 1, "b": 2, "c": 3})
{"a": 1, "c": 3, "b": 2}
>>> print json.dumps({"a": 1, "b": 2, "c": 3}, indent=4)
{
    "a": 1, 
    "c": 3, 
    "b": 2
}

答案 1 :(得分:1)

您甚至不需要为此编写脚本,请使用json.tool模块:

$ cat foo.json 
{ "a": 1, "c": 3, "b": 2
}
$ python -mjson.tool foo.json 
{
    "a": 1,
    "b": 2,
    "c": 3
}

它还可以验证您的json语法:

$ cat bar.json 
{ "a": 1 @#!@ not a proper json }
$ python -mjson.tool bar.json 
Expecting , delimiter: line 1 column 10 (char 9)

答案 2 :(得分:0)

使用jsonlint命令行工具。

如果您愿意,它会检查您的JSON是否存在错误并以格式化方式输出。

我在vim编辑器中使用它,发送当前文件作为输入并返回格式化输出(或错误,失败的地方)。

您也可以在命令行上重新格式化或验证,然后在编辑器中继续使用该文件。

我将python命令行检查(对于Pythonist总是在手边)与以下文件中的jsonlint结果进行了比较:

{
    "camera_matrix": [
        [
            532.80990646,
            0.0,
            342.49522219
        ],
        [
            0.0,
            532.93344713,
            233.88792491,
        ],
        [
            0.0,
            0.0,
            1.0
        ]
    ],
    "dist_coeff": [
        -0.281325798,
        0.0291150014,
        0.00121234399,
        -0.000140823665,
        0.154861424
    ]
}

python版本:

$ python -m json.tool invalid.json
No JSON object could be decoded

jsonlint

$ jsonlint invalid.json
[Error: Parse error on line 1:
...3.88792491,
        ],
        [

-----------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got ']']

对我jsonlint给出了更好的答案。与此同时,我必须承认,与已安装Python相比,必须经历一些额外的安装步骤,但在我的开发机器上,我并不介意。

答案 3 :(得分:0)

使用json而不是jsonpickle ..

import json

with open(file_name,'rw+') as data:
    json_data = json.loads(data.read())
    data.seek(0)
    json.dump(json_data, data, sort_keys=True, indent=2)
    data.truncate()

这将打开文件,加载json对象,然后用格式化的输出覆盖文件。