Python处理JSON数据

Posted QuanBBya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python处理JSON数据相关的知识,希望对你有一定的参考价值。

Python处理JSON数据

  1. 导入JSON库:
import json
  1. JSON函数:
json.loads():解析一个有效的JSON字符串
json.load():解析JSON文件的数据

json.loads():解析一个有效的JSON字符串
1. 准备json字符串
2. 把JSON字符串转为python数据
import json
# 把JSON字符串转为python数据
json_rs = '''[
    "a": 1,
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
]'''
rs = json.loads(json_rs)
print(rs)
print(type(rs))
print(type(rs[0]))
# ['a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5]
# <class 'list'>
# <class 'dict'>
json.load():解析JSON文件的数据
1. 创建指向该文件的文件对象
2. 加载该文件对象,转换为python类型的数据
3. 由于文件对象会涉及到打开、关闭文件;因此使用with
import json
# 把JSON文件转为python数据
with open('test.json') as f:
    cs = json.load(f)
    print(cs)
    print(type(cs))
    print(type(cs[0]))
# ['a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5]
# <class 'list'>
# <class 'dict'>

json.dumps():将 Python 对象以JSON 字符串出现。
1. python数据
2. 将python转为JSON
import json

# 1. 把python数据转为JSON字符串
json_rs = '''[
    "a": "美国",
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
]'''
rs = json.loads(json_rs)
json_str = json.dumps(rs)
# ["a": "\\u7f8e\\u56fd", "b": 2, "c": 3, "d": 4, "e": 5]

#若不使用ascii编码,需要使用参数ensure_ascii
json_str = json.dumps(rs, ensure_ascii=False)
# ["a": "美国", "b": 2, "c": 3, "d": 4, "e": 5]
json.dump():将 Python 对象以JSON 字符串存入文件
1. 创建待存入的文件对象
2. 把python以JSON格式存入文件
import json
json_rs = '''[
    "a": "美国",
    "b": 2,
    "c": 3,
    "d": 4,
    "e": 5
]'''
rs = json.loads(json_rs)
# 2. 把python以JSON格式存储到文件中
# (1) 创建要写入的文件对象
with open('test1.json', 'w') as fp:
# (2)把python以JSON格式存入文件
    json.dump(rs, fp, ensure_ascii=False)
  1. json——轻量级的数据交换格式,读取json数据,实际上是把json格式变成python中字典、列表等格式化的数据,方便索引查找。

对象——内容是:键值对的集合——键必须是字符串。

名称:值,名称:值

数组——其中:值可以为字符串、数值、对象、数组

[值,值]

  1. 注意事项:

(1) 对象的每个属性都要有双引号,否则JSON不能加载;

(2) 键必须是字符串。

  1. 应用场景:

学习的图书馆系统,可以将图书信息保存为json文件在本地。

游戏的个人设置数据和历史数据都可以保存到本地。在游戏加载过程读取。

网页中的图表数据源一般是json格式,可以爬取后转化为我们想要的数据,而不是图表。

  1. python 原始类型向 json 类型的转化对照表:
Python——dict    list, tuple   str, unicode    int, long, float    True    False     None
JSON——object	array         string          number              true    false     null

Python处理json数据--世界国家维度数据

1.准备国家的json数据

  将准备好的json数据放在指定的目录下,此处可以重这里下载

2.测试编写python脚本处理json提取字段值

#coding:utf8
import time, re, os, sys, time,urllib2,shutil,string
import json,datetime

#设置utf-8编码格式
reload(sys)
sys.setdefaultencoding( "utf-8" )

#获取当前日期的前n天
def getbeforeDay(n=0):
    now_time = datetime.datetime.now()
    beforeday = now_time - datetime.timedelta(n)
    return beforeday.strftime("%Y%m%d")
    

scriptDir = os.getcwd()

if len(sys.argv) > 1 :
    job_date_id = sys.argv[1]
else :
    job_date_id = getbeforeDay(0)

print "当前脚本路径:%s,当前参数日期:%s" % (scriptDir,job_date_id)

srcdata={"area":"390,580","code":"263","en":"Zimbabwe","cn":"津巴布韦","iso2":"ZW","iso3":"ZWE","population":"11,651,858"}

jsondata = json.loads(srcdata)
print type(jsondata)

print "######遍历key,values######"
for key in jsondata.keys():
    print key,":",jsondata[key]

print "####或者指定key,返回结果####"
print jsondata[code],jsondata[cn],jsondata[en],jsondata[area],jsondata[population]

 

3.读取文本循环遍历提取字段值

#coding:utf8
import requests, json, time, re, os, sys, time,urllib2,shutil,string
import json,datetime

#设置utf-8编码格式
reload(sys)
sys.setdefaultencoding( "utf-8" )

#读取文件内容
def getLines(filename):
    file_object = open(filename,rb)
    lines = file_object.readlines()
    return lines

#返回规范字符串
def getFormateContext(*name):
    format = ,
    context = name[0]
    for i in name[1:]:
        context = context + format + str(i)
    context = str(context).replace(, ().replace(, )).replace(, ,).replace(, :)
    return context

def getbeforeDay(n=0):
    now_time = datetime.datetime.now()
    beforeday = now_time - datetime.timedelta(n)
    return beforeday.strftime("%Y%m%d")


#写文件
def Write(filename,context,model=a):
    #去除首位空格
    filename = filename.strip()
    #读取目录名称
    path = os.path.dirname(filename)
    #如果目录不存在则创建目录
    if not os.path.exists(path):
        pass
    #读取文件名称
    name = os.path.basename(filename)
    fp = open(filename,model)
    fp.write(context+
)
    fp.close()

scriptDir = os.getcwd()

if len(sys.argv) > 1 :
    job_date_id = sys.argv[1]
else :
    job_date_id = getbeforeDay(10)

print "当前脚本路径:%s,当前参数日期:%s" % (scriptDir,job_date_id)

filename="%s/jsondata/country.json" % (scriptDir)

for line in getLines(filename):
    line = line.strip()
    line = line[1:]
    line = line[:-2]
    for value in line.split("},"):
        srcdata = value+"}"
        #print srcdata
        print srcdata
        jsondata = json.loads(srcdata)

        #国家代码
        code = jsondata[code]
        #国家中文名称
        cn = jsondata[cn]
        #国家英文名称
        en = jsondata[en]
        #面积
        area = jsondata[area].replace(,,‘‘)
        #人口
        population = jsondata[population].replace(,,‘‘)
        #iso2
        iso2 = jsondata[iso2]
        #iso3
        iso3 = jsondata[iso3]
        #print code,cn,en,area,population,iso2,iso3
        context = getFormateContext(code,cn,en,area,population,iso2,iso3)
        print context
        Write("country.csv", context, model=a)

4.最终处理数据结果

   CSV格式: 

   Excel格式:

 

以上是关于Python处理JSON数据的主要内容,如果未能解决你的问题,请参考以下文章

python中json处理

Python JSON数据处理

python处理json数据

Python处理JSON数据

Python 处理JSON数据

Python处理JSON数据