json对象与字符串互转
javascript
1 JSON.parse() 方法用于将一个 JSON 字符串转换为对象。
JSON.parse(text[, reviver])
text:必需, 一个有效的 JSON 字符串。
reviver: 可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
var a = “{'a':1,'b':2}”
经 JSON.parse(a)得到:
{'a':1,'b':2}
2 JSON.stringify() 方法用于将 JavaScript值(对象)转换为 JSON 字符串
JSON.stringify(value[, replacer[, space]])
var a={'a':1, 'b':2}
经 JSON.stringify(a)得到:
“{'a':1,'b':2}”
python
http://axiaoxin.com/article/77/
在Python中最常用到的json处理函数通常是json.dumps()和json.loads(),他们和json.dump()和json.load()的区别在于后者是对一个类文件对象(如StringIO)进行写入/读取,而前者是对字符串进行读写,参数都一样。
1 load()和loads() 字符串->Python的json对象
有一个很有用的参数object_pairs_hook。loads后是无法保证json_data原始顺序的,如果想要保留原有的顺序,那么就需要用到object_pairs_hook。
from collections import OrderedDict
import json
json_data = '{"q": 1, "r": 4, "e": 3, "w": 2}'
json.loads(json_data)
{u'e': 3, u'q': 1, u'r': 4, u'w': 2}
json.loads(json_data, object_pairs_hook=OrderedDict)
OrderedDict([(u'q', 1), (u'r', 4), (u'e', 3), (u'w', 2)])
2 dump()和dumps() Python json对象->字符串
skipkeys: 默认为False,作用是判断字典的key,如果key不是基本类型(str, unicode, int, long, float, bool, None),在dumps的时候就会报TypeError错。若为True,那么遇到不合法key的时候就会跳过。
data = {1: 1, 'a': 'a', None: None, (0, 0): 'bad'}
json.dumps(data, skipkeys=True)
'{"a": "a", "1": 1, "null": null}'
json.dumps(data)
#TypeError: keys must be a string
ensure_ascii: 默认为True,所有的非ascii字符在输出时都会被转义为\uxxxx的序列,返回的对象是一个只由ascii字符组成的str类型,为False时不会进行转义输出,反回的对象是个unicode。(这个参数对包含中文的json输出时非常有用)
data = {u'我': u'是', u'美': u'女'}
json.dumps(data)
'{"\\u6211": "\\u662f", "\\u7f8e": "\\u5973"}'
json.dumps(data, ensure_ascii=False)
u'{"\u6211": "\u662f", "\u7f8e": "\u5973"}'
print json.dumps(data)
{"\u6211": "\u662f", "\u7f8e": "\u5973"}
print json.dumps(data, ensure_ascii=False)
{"我": "是", "美": "女"}
indent: 设置对json进行pretty-printed的缩进空格数
print json.dumps(data, ensure_ascii=False, indent=0)
{
"我": "是",
"美": "女"
}
print json.dumps(data, ensure_ascii=False, indent=4)
{
"我": "是",
"美": "女"
}
separators: 默认值为(', ', ': '),第一个元素为item的分隔符,第二个是key和value的分隔符。separators=(',', ':')可以用来去掉json中的空格来压缩json
print json.dumps(data, ensure_ascii=False, separators=(',', ':'))
{"我":"是","美":"女"}
print json.dumps(data, ensure_ascii=False)
{"我": "是", "美": "女"}
print json.dumps(data, ensure_ascii=False, separators=('+', '-'))
{"我"-"是"+"美"-"女"}
sort_key: 默认是False,即不对进行排序操作
data = {'q': 1, 'w': 2, 'e': 3, 'r': 4}
print json.dumps(data, ensure_ascii=False, sort_keys=False)
{"q": 1, "r": 4, "e": 3, "w": 2}
print json.dumps(data, ensure_ascii=False, sort_keys=True)
{"e": 3, "q": 1, "r": 4, "w": 2}
处理中文json时,要想不每次都给一堆重复的参数,可以用partial
import json
from functools import partial
json_dumps = partial(json.dumps, ensure_ascii=False, sort_keys=True)
中文测试
json_dumps("呵呵")
'"\xe5\x91\xb5\xe5\x91\xb5"' # unicode
json.dumps("呵呵")
'"\\u5475\\u5475"' # ascii
json_dumps("呵呵").decode('utf-8') # unicode -> utf-8
u'"\u5475\u5475"'
json.dumps("呵呵").decode('utf-8') # ascii -> utf-8
u'"\\u5475\\u5475"'
print json_dumps("呵呵").decode('utf-8')
"呵呵"
print json.dumps("呵呵").decode('utf-8') # 让大家苦恼的大概就是这个,因为她原本就不是unicode
"\u5475\u5475"
flask
在Flask中直接return一个dumps的json字符串其实这样并不合理,因为这样返回的content-type是text/html,而json的content-type应该是application/json
有两种方法在flask中返回正确json,一种是使用flask的jsonify,他会在dumps的时候自动为你加上content-type,或者手动的显式在response中指定mimetype
from flask import jsonify
@router
def view():
return jsonify(*arg, **kwargs)
# or return Response(response=json_data, mimetype="application/json")
用jsonify很省事,但是在有中文的时候就坑爹了,可以在app的配置中设置app.config['JSON_AS_ASCII'] = False来输出unicode
json对象与字符串互转的更多相关文章
- json对象与字符串互转方法
字符串转json对象: var data = eval( '(' + str + ')' ); json对象转字符串: var jsonStr = JSON.stringify( obj );
- JSON 对象 与 字符串 互转
$sui = [ 'xixixi' => 'suisuisui', 'hahaha' => 'longlonglong', ]; $data = json_encode($sui); pr ...
- javascript中json对象与字符串互转及取值
一. json字符串转换为javascript对象,并取值 var answer = '{"id":0}' var value= JSON.parse(answer); //转 ...
- json对象与字符串相互转换
JSON 语法 JSON 语法规则 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字符串.数字.对象.数组等.但是对象和数组是比较特殊且常用的两种类型: 对象表 ...
- js中的json对象和字符串之间的转化
字符串转对象(strJSON代表json字符串) var obj = eval(strJSON); var obj = strJSON.parseJSON(); var obj = JSO ...
- json对象转字符串与json字符串转对象
1.概述: 我们在编程时进场会遇到json对象转字符串,或者字符串转对象的情况. 2.解决办法: json.parse()方法是将json字符串转成json对象. json.stringfy()方法是 ...
- json对象与字符串的相互转换,数组和字符串的转换
1.json对象转换为字符串 JSON.stringify(value [, replacer] [, space]) var student = new Object(); student.id ...
- json对象和字符串的相互转换
JSON.stringify(obj) 将JSON对象转为字符串. JSON.parse(string) 将字符串转为JSON对象格式. 后台给你数据的时候,有时候会给你字符串 ...
- jquery转换json对象为字符串
jquery转换json对象为字符串 JSON.stringify(jsonObject),可用于单个JSON对象,也可用于JSON数组 alert(JSON.stringify(jsonObject ...
随机推荐
- kafka模拟客户端发送、接受消息
producer 消息的生成者,即发布消息 consumer 消息的消费者,即订阅消息 broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker zook ...
- codeforces 553A . Kyoya and Colored Balls 组合数学
Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors are ...
- MST_prim
刚刚发了mst 的kruskal,现在再来一发,说一说prim咯. prim适用于稠密图. 与kruskal不同,prim是从一个点开始,不断加入新的点直至连通所有点. 讲讲prim的过程,我们假定有 ...
- jquery.form.js详细讲解
现在大家在在表单提交的时候都不流行中间页面做跳转(比如发布成功的提示页面),或者说这样做会降低用户体验.所以一般都是采用ajax来提交,能看到这个页面的朋友,想必对ajax提交表单已经是很熟悉了. 如 ...
- 关于微信网页调用js-sdk相关接口注意事项目(一级域名与二级域名互相干扰!!!)
不知道有没有网友遇到过同一个web应用用不同的域名(一级或二级域名)在两个公众号中调用JSSDK相关接口实现功能, 这种做法本来没有问题,问题在于用二级域名(同属一级域名下的二级域名)绑定另一个web ...
- 高可用集群heartbeat全攻略
heartbeat的概念 Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(r ...
- 并发工具类(三)控制并发线程数的Semaphore
原文:http://ifeve.com/concurrency-semaphore/#more-14753 简介 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程, ...
- .nil? .empty? .blank? .present? in Ruby on Rails
We get confused when there are many options to choose from. Same is the case when it comes to use an ...
- 无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动
原文链接:http://www.cnblogs.com/IT-Bear/archive/2012/01/04/2311546.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET S ...
- Ulipad和有道词典冲突的问题
Ulipad和目前版本的有道词典有冲突,表现为先开有道词典,Ulipad就无法运行. 解决方法是:找到Ulipad安装目录下的config.ini,添加以下两行: [server] port=50 ...