
如有翻译问题欢迎评论指出,谢谢。
为什么 Python 无法解释 json 数据?
-
michele asked:
-
文件里面有 json 如下:
-
{ "maps": [ { "id": "blabla", "iscategorical": "0" }, { "id": "blabla", "iscategorical": "0" } ], "masks": [ "id": "valore" ], "om_points": "value", "parameters": [ "id": "valore" ] }
-
然后我写了脚本来打印所有 json 数据:
-
import json from pprint import pprint with open('data.json') as f: data = json.load(f) pprint(data)
-
但程序报错了:
-
Traceback (most recent call last): File "
", line 5, in data = json.load(f) File "/usr/lib/python3.5/json/__init__.py", line 319, in loads return _default_decoder.decode(s) File "/usr/lib/python3.5/json/decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting ',' delimiter: line 13 column 13 (char 213) -
怎么才能解释 json,并从中取值?
-
-
Answers:
-
Justin Peel – vote: 2187
-
这串数据并不是有效的 JSON 格式,有的 [] 应该是 {} :
[]
是 json 数组,对应 Python 的list
{}
是 json 对象,对应 Python 的dict
-
正确的 json 应该是这样的:
-
{ "maps": [ { "id": "blabla", "iscategorical": "0" }, { "id": "blabla", "iscategorical": "0" } ], "masks": { "id": "valore" }, "om_points": "value", "parameters": { "id": "valore" } }
-
然后是代码:
-
import json from pprint import pprint with open('data.json') as f: data = json.load(f) pprint(data)
-
对于这些数据,可以这样获取值:
-
data["maps"][0]["id"] data["masks"]["id"] data["om_points"]
-
试试,看看是不是正常了。
-
Bengt – vote: 320
-
data.json
应该是这样的: -
{ "maps":[ {"id":"blabla","iscategorical":"0"}, {"id":"blabla","iscategorical":"0"} ], "masks": {"id":"valore"}, "om_points":"value", "parameters": {"id":"valore"} }
-
代码应该是这样的:
-
import json from pprint import pprint with open('data.json') as data_file: data = json.load(data_file) pprint(data)
-
注意这只在 Python 2.6 及以上版本可用,因为它依赖于
with
。在 Python 2.5 使用from __future__ import with_statement
,对于 Python 2.4 以下的版本,见 Justin Peel 的回答。 -
这样可以获取单个值:
-
data["maps"][0]["id"] # will return 'blabla' data["masks"]["id"] # will return 'valore' data["om_points"] # will return 'value'
-
-
Geng Jiawen – vote: 76
-
Justin Peel 的回答很有效,不过如果在 Python 3 中读取 json 的话,可以这样:
-
with open('data.json', encoding='utf-8') as data_file: data = json.loads(data_file.read())
-
注意:使用
json.loads
代替json.load
。在 Python 3 中,json.loads
传入字符串参数。json.load
传入类文件对象参数。data_file.read()
返回字符串对象。 -
实话说,我不觉得大多数情况下读取整个 json 数据会有问题。我在 JS、Java、Kotlin、cpp、rust 都试过。考虑内存问题对我来说就像个笑话 🙂
-
换句话说,我不认为你能在不完全读取它的情况下解释 json 数据。
-
-
Why can\’t Python parse this JSON data?
-
michele asked:
-
I have this JSON in a file:
文件里面有 json 如下: -
{ "maps": [ { "id": "blabla", "iscategorical": "0" }, { "id": "blabla", "iscategorical": "0" } ], "masks": [ "id": "valore" ], "om_points": "value", "parameters": [ "id": "valore" ] }
-
I wrote this script to print all of the JSON data:
然后我写了脚本来打印所有 json 数据: -
import json from pprint import pprint with open('data.json') as f: data = json.load(f) pprint(data)
-
This program raises an exception, though:
但程序报错了: -
Traceback (most recent call last): File "
", line 5, in data = json.load(f) File "/usr/lib/python3.5/json/__init__.py", line 319, in loads return _default_decoder.decode(s) File "/usr/lib/python3.5/json/decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python3.5/json/decoder.py", line 355, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting ',' delimiter: line 13 column 13 (char 213) -
How can I parse the JSON and extract its values?
怎么才能解释 json,并从中取值?
-
-
Answers:
-
Justin Peel – vote: 2187
-
Your data is not valid JSON format. You have
[]
when you should have{}
:
这串数据并不是有效的 JSON 格式,有的 [] 应该是 {} :[]
are for JSON arrays, which are calledlist
in Python[]
是 json 数组,对应 Python 的list
{}
are for JSON objects, which are calleddict
in Python{}
是 json 对象,对应 Python 的dict
-
Here\’s how your JSON file should look:
正确的 json 应该是这样的:
-
{ "maps": [ { "id": "blabla", "iscategorical": "0" }, { "id": "blabla", "iscategorical": "0" } ], "masks": { "id": "valore" }, "om_points": "value", "parameters": { "id": "valore" } }
-
Then you can use your code:
然后是代码: -
import json from pprint import pprint with open('data.json') as f: data = json.load(f) pprint(data)
-
With data, you can now also find values like so:
对于这些数据,可以这样获取值: -
data["maps"][0]["id"] data["masks"]["id"] data["om_points"]
-
Try those out and see if it starts to make sense.
试试,看看是不是正常了。 -
Bengt – vote: 320
-
Your
data.json
should look like this:data.json
应该是这样的: -
{ "maps":[ {"id":"blabla","iscategorical":"0"}, {"id":"blabla","iscategorical":"0"} ], "masks": {"id":"valore"}, "om_points":"value", "parameters": {"id":"valore"} }
-
Your code should be:
代码应该是这样的: -
import json from pprint import pprint with open('data.json') as data_file: data = json.load(data_file) pprint(data)
-
Note that this only works in Python 2.6 and up, as it depends upon the
with
-statement. In Python 2.5 usefrom __future__ import with_statement
, in Python <= 2.4, see Justin Peel\’s answer, which this answer is based upon.
注意这只在 Python 2.6 及以上版本可用,因为它依赖于with
。在 Python 2.5 使用from __future__ import with_statement
,对于 Python 2.4 以下的版本,见 Justin Peel 的回答。 -
You can now also access single values like this:
这样可以获取单个值: -
data["maps"][0]["id"] # will return 'blabla' data["masks"]["id"] # will return 'valore' data["om_points"] # will return 'value'
-
-
Geng Jiawen – vote: 76
-
Justin Peel\’s answer is really helpful, but if you are using Python 3 reading JSON should be done like this:
Justin Peel 的回答很有效,不过如果在 Python 3 中读取 json 的话,可以这样: -
with open('data.json', encoding='utf-8') as data_file: data = json.loads(data_file.read())
-
Note: use
json.loads
instead ofjson.load
. In Python 3,json.loads
takes a string parameter.json.load
takes a file-like object parameter.data_file.read()
returns a string object.
注意:使用json.loads
代替json.load
。在 Python 3 中,json.loads
传入字符串参数。json.load
传入类文件对象参数。data_file.read()
返回字符串对象。 -
To be honest, I don\’t think it\’s a problem to load all json data into memory in most cases.I see this in JS, Java, Kotlin, cpp, rust almost every language I use.Consider memory issue like a joke to me 🙂
实话说,我不觉得大多数情况下读取整个 json 数据会有问题。我在 JS、Java、Kotlin、cpp、rust 都试过。考虑内存问题对我来说就像个笑话 🙂 -
On the other hand, I don\’t think you can parse json without reading all of it.
换句话说,我不认为你能在不完全读取它的情况下解释 json 数据。
-
-
近期评论