为什么可以';Python解析这个JSON数据吗?

为什么可以';Python解析这个JSON数据吗?,python,json,parsing,Python,Json,Parsing,我将此JSON保存在一个文件中: { “地图”:[ { “id”:“blabla”, “iscategorical”:“0” }, { “id”:“blabla”, “iscategorical”:“0” } ], “面具”:[ “id”:“valore” ], “om_点数”:“值”, “参数”:[ “id”:“valore” ] } 我编写此脚本是为了打印所有JSON数据: import json from pprint import pprint with open('data.jso

我将此JSON保存在一个文件中:

{
“地图”:[
{
“id”:“blabla”,
“iscategorical”:“0”
},
{
“id”:“blabla”,
“iscategorical”:“0”
}
],
“面具”:[
“id”:“valore”
],
“om_点数”:“值”,
“参数”:[
“id”:“valore”
]
}
我编写此脚本是为了打印所有JSON数据:

import json
from pprint import pprint

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

pprint(data)
但是,此程序引发了一个异常:

回溯(最近一次呼叫最后一次):
文件“”,第5行,在
data=json.load(f)
文件“/usr/lib/python3.5/json/_init__.py”,第319行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python3.5/json/decoder.py”,第339行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“/usr/lib/python3.5/json/decoder.py”,第355行
obj,end=self.scan_一次(s,idx)
json.decoder.JSONDecodeError:应为','分隔符:第13行第13列(字符213)
如何解析JSON并提取其值?

您的数据格式无效。当您应该有
{}
时,您有
[]

  • []
    用于JSON数组,在Python中称为
    list
  • {}
    用于JSON对象,在Python中称为
    dict
以下是JSON文件的外观:

{
“地图”:[
{
“id”:“blabla”,
“iscategorical”:“0”
},
{
“id”:“blabla”,
“iscategorical”:“0”
}
],
“面具”:{
“id”:“valore”
},
“om_点数”:“值”,
“参数”:{
“id”:“valore”
}
}
然后您可以使用您的代码:

导入json
从pprint导入pprint
将open('data.json')作为f:
data=json.load(f)
pprint(数据)
使用数据,您现在还可以找到如下值:

data[“maps”][0][“id”]
数据[“掩码”][“id”]
数据[“om_点”]

试试这些,看看它是否有意义。

您的
数据。json
应该如下所示:

{
 "maps":[
         {"id":"blabla","iscategorical":"0"},
         {"id":"blabla","iscategorical":"0"}
        ],
"masks":
         {"id":"valore"},
"om_points":"value",
"parameters":
         {"id":"valore"}
}
data["maps"][0]["id"]  # will return 'blabla'
data["masks"]["id"]    # will return 'valore'
data["om_points"]      # will return 'value'
with open('data.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())
您的代码应该是:

import json
from pprint import pprint

with open('data.json') as data_file:    
    data = json.load(data_file)
pprint(data)
请注意,这仅适用于Python2.6及更高版本,因为它取决于。在Python2.5中,使用带有u语句的uu future uuu导入的
,在Python中,“Ultra JSON”或简单的“ujson”可以处理JSON文件输入中的
[]
。如果您正在将JSON输入文件作为JSON元素列表读取到程序中;例如,
[{{}]},{},[]等..]
ujson可以处理任意顺序的字典列表,字典列表

您可以在中找到ujson,并且API几乎与Python内置的
json
库相同

如果加载更大的JSON文件,ujson也会更快。在提供的同一链接中,您可以看到与其他Python JSON库相比的性能详细信息。

非常有用,但是如果您使用Python 3,读取JSON应该这样做:

{
 "maps":[
         {"id":"blabla","iscategorical":"0"},
         {"id":"blabla","iscategorical":"0"}
        ],
"masks":
         {"id":"valore"},
"om_points":"value",
"parameters":
         {"id":"valore"}
}
data["maps"][0]["id"]  # will return 'blabla'
data["masks"]["id"]    # will return 'valore'
data["om_points"]      # will return 'value'
with open('data.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())
注意:使用
json.load
而不是
json.load
。在Python3中,
json.loads
接受一个字符串参数
json.load
采用类似文件的对象参数
data\u file.read()
返回字符串对象

老实说,我不认为在大多数情况下将所有json数据加载到内存中是一个问题。 我在JS、Java、Kotlin、cpp和我使用的几乎所有语言中都看到了这一点。 把记忆问题当作一个笑话给我听:< /P>
另一方面,我认为如果不阅读所有内容,就无法解析json。

如果您使用的是Python3,您可以尝试将(
connection.json
文件)json更改为:

然后使用以下代码:

connection_file = open('connection.json', 'r')
conn_string = json.load(connection_file)
conn_string['connection1']['connection_string_python'])
connection_file.close()
>>> test1

下面是修改后的
data.json
文件:

{
“地图”:[
{
“id”:“blabla”,
“iscategorical”:“0”
},
{
“id”:“blabla”,
“iscategorical”:“0”
}
],
“面具”:[{
“id”:“valore”
}],
“om_点数”:“值”,
“参数”:[{
“id”:“valore”
}]
}
您可以使用以下行在控制台上调用或打印数据:

导入json
从pprint导入pprint
将open('data.json')作为数据文件:
data\u item=json.load(数据文件)
pprint(数据项)
打印的预期输出(数据项['parameters'][0]['id'])

打印的预期输出(数据项['parameters'][0]['id'])


此解析中有两种类型

  • 从系统路径解析文件中的数据
  • 从远程URL解析JSON
  • 从文件中,可以使用以下命令

    import json
    json = json.loads(open('/path/to/file.json').read())
    value = json['key']
    print(json['value'])
    

    本篇文章解释了使用两种场景的完整解析和获取值。

    作为python3用户

    load
    load
    方法之间的区别非常重要,尤其是当您从文件中读取json数据时

    如文件所述:

    json.load:

    反序列化fp(a.read()-支持文本文件或二进制文件 包含JSON文档的文件)使用 转换表

    json.load:

    加载:反序列化s(str、bytes或bytearray实例 包含JSON文档)转换为Python对象 桌子

    load方法可以直接读取打开的json文档,因为它可以读取二进制文件

    with open('./recipes.json') as data:
      all_recipes = json.load(data)
    
    因此,您的json数据以根据此转换表指定的格式提供:


    Ok,我必须控制我的代码,因为这个json文件是从java对象生成的。谢谢,谢谢你的解决方案。我在打印时得到了一个unicode符号。(如“瓦洛雷”)。如何防止它?不错,但是python在每个键之前添加了一个
    u'
    。知道为什么吗?这就是为什么您的文本是unicode类型而不是字符串。大多数情况下,对于德语UMLAUT和与其他模块/程序共享文本结果等,最好使用unicode文本。那么你是g
    with open('./recipes.json') as data:
      all_recipes = json.load(data)