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. C++ 常见崩溃问题分析

    一.前言 从事自动化测试平台开发的编程实践中,遭遇了几个程序崩溃问题,解决它们颇费了不少心思,解决过程中的曲折和彻夜的辗转反侧却历历在目,一直寻思写点东西,为这段难忘的经历留点纪念,总结惨痛的教训带来 ...

  2. suibi11172

    http://blog.sina.com.cn/s/blog_12f37f0f00102wi8q.html 七.Python列表操作的函数和方法 列表操作包含以下函数: 1.cmp(list1, li ...

  3. [物理学与PDEs]第2章习题参考解答

    [物理学与PDEs]第2章习题1 无旋时的 Euler 方程 [物理学与PDEs]第2章习题2 质量力有势时的能量方程 [物理学与PDEs]第2章习题3 Laplace 方程的 Neumann 问题 ...

  4. [Tex学习]给汉字注音

    \documentclass{article} \usepackage[CJK]{ruby} \usepackage{pinyin} \begin{document} \begin{CJK*}{GBK ...

  5. repo安装

    repo是使用python开发的一个用于多版本管理的工具,可以和git协作,简化git的多版本管理. repo安装: 1.新建~/bin,并将此目录包含在path变量中(如果已存在,且已在path变量 ...

  6. java多线程的使用1

    方式1: public class LiftOff implements Runnable { ; ; private final int id = taskCount++; public LiftO ...

  7. 那些不能错过的Xcode插件

      来源:http://www.cocoachina.com/applenews/devnews/2013/0918/7022.html 古人云“工欲善其事必先利其器”,打造一个强大的开发环境,是立即 ...

  8. iOS设计模式反思之单例模式的进化

    什么是单例模式? 单例模式想一个大独裁者,他规定在他的国度里面,所有数据的访问和请求都得经过他,甚至你要调用相关的函数也得经过它.学术一点就是,单例模式,为某一类 需求和数据提供了统一的程序接口.主要 ...

  9. embed标签的使用(在网页中播放各种音频视频的插件的使用)

    播放器插件使用说明: 代码:< EMBED src=“music.mid”autostart=“true”loop=“2”width=“80”height=“30”> src:音乐文件的路 ...

  10. restful api设计中的幂等性的理解。

    以前就听说过这个词,但是最近看了一些文章,产生了一些疑惑, GET是幂等性.例如查一条数据,如果你给定一个id.那么你查多少次.都是这条数据,但是我疑问,这里的幂等性指的是,每次都返回一条.这个数量, ...