20220726
json与字典区别
1、json 中除数据外,key和value都是字符串,要用双引号引起来;空值为null;布尔值为false/true(小写)
2、字典,key,value可单引号;空值为None;布尔值为False/True
20210831
json严格双引号
字典存储为json 并读取转换为dataframe
20210810
https://www.cnblogs.com/XhyTechnologyShare/p/12033690.html
读取json格式
20210729
ValueError: Expected object or value
必须是双引号 不能是单引号
或者是里面有其他错误格式
emeditor 可以直接检查是否有错
path='D:\code12temp\he_zong\\'
df=pd.read_json(path+'yuetong1.json',encoding='utf8')
字典文件 最外面需要有中括号
因为内容是unicode编码 所以通过设置编码就可以直接读出还原数据
读取json文件
20210617
ValueError: ‘lines’ keyword only valid when ‘orient’ is records
df.to_json(r’E:\金盘\百度关系抽取数据_SAOKE_DATA_chinese.json’,orient=‘records’,lines=True,force_ascii=False)
orient 只能是 records的取值形式时候,才能分行存储
否则会完全存成一行
一般都是这种 这种是一行一行处理 索引0对应第0行
Pandas read_json()时报错ValueError: Trailing data
https://blog.csdn.net/Duke_LH/article/details/84674715
今天展示一个利用pandas将json数据导入excel例子,主要利用的是pandas里的read_json函数将json数据转化为dataframe。先拿出我要处理的json字符串:
strtext='[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529","code2":null,"time":1013395466000},\
{"ttery":"min","issue":"20130801-3390","code":"7,8,2,1,2","code1":"298058212","code2":null,"time":1013395406000},\
{"ttery":"min","issue":"20130801-3389","code":"5,9,1,2,9","code1":"298329129","code2":null,"time":1013395346000},\
{"ttery":"min","issue":"20130801-3388","code":"3,8,7,3,3","code1":"298588733","code2":null,"time":1013395286000},\
{"ttery":"min","issue":"20130801-3387","code":"0,8,5,2,7","code1":"298818527","code2":null,"time":1013395226000}]'
pandas.read_json的语法如下
pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=True,
convert_axes=True, convert_dates=True, keep_default_dates=True,
numpy=False, precise_float=False, date_unit=None, encoding=None,
lines=False, chunksize=None, compression='infer')
第一参数就是json文件路径或者json格式的字符串。
第二参数orient是表明预期的json字符串格式。orient的设置有以下几个值:
(1).‘split’ : dict like {index -> [index], columns -> [columns], data -> [values]}
这种就是有索引,有列字段,和数据矩阵构成的json格式。key名称只能是index,columns和data。
‘records’ : list like [{column -> value}, … , {column -> value}]
split 各种元素都分开
这种就是成员为字典的列表。如我今天要处理的json数据示例所见。构成是列字段为键,值为键值,每一个字典成员就构成了dataframe的一行数据。
‘index’ : dict like {index -> {column -> value}}
以索引为key,以列字段构成的字典为键值。如:
‘columns’ : dict like {column -> {index -> value}}
这种处理的就是以列为键,对应一个值字典的对象。这个字典对象以索引为键,以值为键值构成的json字符串。如下图所示:
这种是以列为单位进行处理
‘values’ : just the values array。
values这种我们就很常见了。就是一个嵌套的列表。里面的成员也是列表,2层的。
里面每个列表是对应一行的值
主要就说下这两个参数吧。下面我们回到示例中来。我们看前面可以发现示例是一个orient为records的json字符串。
这样就好处理了。看代码:
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 5 09:01:38 2018
@author: FanXiaoLei
"""
import pandas as pd
strtext='[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529","code2":null,"time":1013395466000},\
{"ttery":"min","issue":"20130801-3390","code":"7,8,2,1,2","code1":"298058212","code2":null,"time":1013395406000},\
{"ttery":"min","issue":"20130801-3389","code":"5,9,1,2,9","code1":"298329129","code2":null,"time":1013395346000},\
{"ttery":"min","issue":"20130801-3388","code":"3,8,7,3,3","code1":"298588733","code2":null,"time":1013395286000},\
{"ttery":"min","issue":"20130801-3387","code":"0,8,5,2,7","code1":"298818527","code2":null,"time":1013395226000}]'
df=pd.read_json(strtext,orient='records')
df.to_excel('pandas处理json.xlsx',index=False,columns=["ttery","issue","code","code1","code2","time"])
records 没有行的索引 但是是以行为单位来处理的 列表里面的每个元素都是字典
最终写入excel如下图: