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对象与字符串互转的更多相关文章

  1. json对象与字符串互转方法

    字符串转json对象: var data = eval( '(' + str + ')' ); json对象转字符串: var jsonStr = JSON.stringify( obj );

  2. JSON 对象 与 字符串 互转

    $sui = [ 'xixixi' => 'suisuisui', 'hahaha' => 'longlonglong', ]; $data = json_encode($sui); pr ...

  3. javascript中json对象与字符串互转及取值

    一.   json字符串转换为javascript对象,并取值 var answer = '{"id":0}' var value= JSON.parse(answer); //转 ...

  4. json对象与字符串相互转换

    JSON 语法 JSON 语法规则 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字符串.数字.对象.数组等.但是对象和数组是比较特殊且常用的两种类型: 对象表 ...

  5. js中的json对象和字符串之间的转化

    字符串转对象(strJSON代表json字符串)   var obj = eval(strJSON);   var obj = strJSON.parseJSON();   var obj = JSO ...

  6. json对象转字符串与json字符串转对象

    1.概述: 我们在编程时进场会遇到json对象转字符串,或者字符串转对象的情况. 2.解决办法: json.parse()方法是将json字符串转成json对象. json.stringfy()方法是 ...

  7. json对象与字符串的相互转换,数组和字符串的转换

    1.json对象转换为字符串 JSON.stringify(value [, replacer] [, space])  var student = new Object(); student.id ...

  8. json对象和字符串的相互转换

    JSON.stringify(obj)       将JSON对象转为字符串. JSON.parse(string)       将字符串转为JSON对象格式. 后台给你数据的时候,有时候会给你字符串 ...

  9. jquery转换json对象为字符串

    jquery转换json对象为字符串 JSON.stringify(jsonObject),可用于单个JSON对象,也可用于JSON数组 alert(JSON.stringify(jsonObject ...

随机推荐

  1. kafka模拟客户端发送、接受消息

    producer   消息的生成者,即发布消息 consumer   消息的消费者,即订阅消息 broker     Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker zook ...

  2. 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 ...

  3. MST_prim

    刚刚发了mst 的kruskal,现在再来一发,说一说prim咯. prim适用于稠密图. 与kruskal不同,prim是从一个点开始,不断加入新的点直至连通所有点. 讲讲prim的过程,我们假定有 ...

  4. jquery.form.js详细讲解

    现在大家在在表单提交的时候都不流行中间页面做跳转(比如发布成功的提示页面),或者说这样做会降低用户体验.所以一般都是采用ajax来提交,能看到这个页面的朋友,想必对ajax提交表单已经是很熟悉了. 如 ...

  5. 关于微信网页调用js-sdk相关接口注意事项目(一级域名与二级域名互相干扰!!!)

    不知道有没有网友遇到过同一个web应用用不同的域名(一级或二级域名)在两个公众号中调用JSSDK相关接口实现功能, 这种做法本来没有问题,问题在于用二级域名(同属一级域名下的二级域名)绑定另一个web ...

  6. 高可用集群heartbeat全攻略

    heartbeat的概念   Linux-HA的全称是High-Availability Linux,它是一个开源项目,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(r ...

  7. 并发工具类(三)控制并发线程数的Semaphore

    原文:http://ifeve.com/concurrency-semaphore/#more-14753 简介 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程, ...

  8. .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 ...

  9. 无法向会话状态服务器发出会话状态请求请。确保 ASP.NET State Service (ASP.NET 状态服务)已启动

    原文链接:http://www.cnblogs.com/IT-Bear/archive/2012/01/04/2311546.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET S ...

  10. Ulipad和有道词典冲突的问题

    Ulipad和目前版本的有道词典有冲突,表现为先开有道词典,Ulipad就无法运行. 解决方法是:找到Ulipad安装目录下的config.ini,添加以下两行:   [server] port=50 ...