我已成功从我学校的课程注册系统中删除了一兆字节的数据。我构建了一个对象图,然后将其保存为JSON。
Python在一个文件中给了我一个巨大的JSON字符串,我希望用文本编辑器很好地格式化它。我想如果我在Xcode中打开并用换行符+逗号替换逗号,我就会回家。然后我可以点击control + i,然后Xcode会缩进给我。
搜索和替换,缩进和语法突出显示所有似乎都在任意中断某处。我怀疑JSON格式不正确,但数据足够大,我不能简单地解决问题并自己调整一些东西。
我正在使用以下代码编写数据:
file_object = open(file_name,'wb')
json_data = jsonpickle.encode(data)
file_object.write(json_data)
知道如何诊断问题,或问题是什么?
答案 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对象,然后用格式化的输出覆盖文件。