Python中的json操作

简介: Python中的json操作标签(空格分隔): python 编码 json字符串前缀问题字符串前缀可以有r,ur:表示原始(raw)字符串,比如'\n'不会被转义。常用于正则。u:表示unicode字符串。

Python中的json操作

标签(空格分隔): python 编码 json


字符串前缀问题

字符串前缀可以有r,u
r:表示原始(raw)字符串,比如'\n'不会被转义。常用于正则。

u:表示unicode字符串。
python3系列的字符串默认是unicode,无需用u进行转码。我用的是python2.7,所以还是要手动处理编码。

发生问题的一个场景是:从某个url抓取json格式数据,import了python自带的jsonsimplejson包,调用其loads()方法后,得到的对象(字典)的key的类型是unicode,形如:

obj={
    u'name':'chris',
    u'age':22
}

而我当前的一个函数,传入参数为一个dict字典,用它生成为sql语句,带着u的insert语句插入数据库会报错。需要去除u

u是unicode类型,不带u的是字符串类型。对于一个unicode变量,可以用encode()函数转为str类型。但是现在有一整个字典的key都要转换,我不知道怎么转换。

一个解决方法是重写一个json构建/解析的函数。我并不想重复造轮子,只是python2.7下json和simplejson两个包太难用。尝试了各种参数,还是无法得到key为str类型而不是unicode类型的结果。

我传给你的是ascii编码的对象,为什么不能返还给我一个ascii编码的对象?果断自己写一个好用的。

一个简陋的json构建/解析实现

          dumps(序列化)
     -------------------> 
 obj                        str
 对象                       字符串
     <-------------------
         loads(反序列化)
    

这里采用类似dumps和loads的名字,不过加了自己的前缀。
从obj对象(python中是字典类型)到str类型,是序列化(dumps)的过程;把str解析后装载为obj对象,是反序列化(loads)的过程。序列化目的在于网络传输。

#!/usr/bin/python
#coding:utf-8

import types

#从obj到str
def chris_dumps(dict_data):
    jar=""
    result = chris_dumps_iter(dict_data, jar)
    return "{"+result+"}"

def chris_dumps_iter(dict_data, jar):
    for k in dict_data:
        jar = jar + "\"" + k + "\": "
        if isinstance(dict_data[k], dict):
            tmp = chris_dumps(dict_data[k])
            jar = jar+tmp
        elif isinstance(dict_data[k], basestring):
            jar = jar + "\""+dict_data[k]+"\""
        else:
            jar = jar + str(dict_data[k])
        jar = jar + ", "
    return jar[0:len(jar)-2]

#从str到objs
def chris_loads(data):
    jar = {}
    result = chris_loads_iter(data, jar)
    return result

def chris_loads_iter(data, jar):
    cnt = 0  # count brackets  {:+1   }:-1
    key = ""
    val = ""
    quote=False
    colon = False   # 冒号,False表示在冒号左边,True表示在右边
    #for i in xrange(len(data)):
    i=0
    while i<len(data):
        if quote:            
            if data[i]=="\"": #右引号
                if colon==False: 
                    quote=False
                else:
                    val += data[i]
            else:
                key += data[i]
                
        else:
            if data[i]=="\"": #左引号
                if colon==False:
                    quote=True
                    key = ""
                else:
                    val += data[i]
            elif data[i]==":":
                colon = True
            elif data[i]=="," or data[i]=='}':
                #jar[key]=eval(val) #干的漂亮!
                jar[key]=eval(val)
                val = ""
                colon = False
            elif data[i]==" ":
                pass
            elif data[i]=="{":
                if colon==True :
                    j=i
                    subdata = ""
                    while data[j]!='}':
                        subdata += data[j]
                        j += 1
                    subdata += "}"
                    i=j+1
                    sub_result = chris_loads(subdata)
                    val=sub_result
                    jar[key]=sub_result
                    val = ""
                    colon = False
            else:
                val += data[i]
        i += 1 
    return jar

写好了,测试一下:

if __name__ == "__main__":
    s1={'name':'chris', 'age': 22}
    s={'name':'chris', 'age':22, 'property': { 'id': 2011, 'lang': 'chinese'}}
    t=chris_dumps(s)
    g=s['property']
     
    print 't:', t
    q=chris_loads(t)
    print 'q:', q
    print type(q)

P.S.其实这个loads函数写的并不优美,正确的思路应当是画出状态自动机,列出每种情况以及各个情况之间的转化关系。

目录
相关文章
|
2月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
2月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
5月前
|
JSON API 数据格式
Python采集京东商品评论API接口示例,json数据返回
下面是一个使用Python采集京东商品评论的完整示例,包括API请求、JSON数据解析
|
5月前
|
存储 JSON API
Python与JSON:结构化数据的存储艺术
Python字典与JSON格式结合,为数据持久化提供了便捷方式。通过json模块,可轻松实现数据序列化与反序列化,支持跨平台数据交换。适用于配置管理、API通信等场景,兼具可读性与高效性,是Python开发中不可或缺的数据处理工具。
200 0
|
2月前
|
JSON 算法 API
Python中的json模块:从基础到进阶的实用指南
本文深入解析Python内置json模块的使用,涵盖序列化与反序列化核心函数、参数配置、中文处理、自定义对象转换及异常处理,并介绍性能优化与第三方库扩展,助你高效实现JSON数据交互。(238字)
356 4
|
2月前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
177 0
|
3月前
|
JSON API 数据安全/隐私保护
Python采集淘宝评论API接口及JSON数据返回全流程指南
Python采集淘宝评论API接口及JSON数据返回全流程指南
|
4月前
|
JSON 安全 API
Python处理JSON数据的最佳实践:从基础到进阶的实用指南
JSON作为数据交换通用格式,广泛应用于Web开发与API交互。本文详解Python处理JSON的10个关键实践,涵盖序列化、复杂结构处理、性能优化与安全编程,助开发者高效应对各类JSON数据挑战。
301 1
|
9月前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
10月前
|
数据采集 JSON 测试技术
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
483 83

推荐镜像

更多