Pthon JSON

Posted

tags:

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

  JSON(javascript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

  JSON简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。

  • 对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

  • 数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

  Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() ,下面举例看Ptython是如何通过方法进行编码解码的:

import json
obj = [[1, 2, 3], 123, 123.123, ‘abc‘, {‘key1‘: (1, 2, 3), ‘key2‘: (4, 5, 6)},True,False,None]
print ‘*****Encoding*****‘
dus = json.dumps(obj)
print type(dus)
print dus
print ‘*****Decoding*****‘
los=json.loads(dus)
print type(los)
print los

运行结果:
*****Encoding*****
<type ‘str‘>
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}, true, false,null]
*****Decoding*****
<type ‘list‘>
[[1, 2, 3], 123, 123.123, u‘abc‘, {u‘key2‘: [4, 5, 6], u‘key1‘: [1, 2, 3]}, True, False,None]

  从例子中可以看出json.dumps()方法返回了一个str对象,json.loads()方法返回了原始的对象;其实在JSON的编码过程中,会存在从python原始类型向json类型的转化过程,例子中有些数据类型进行了改变,如元组则转换为了列表;Python-->Json具体的转化如下:

dict
object
list,tuple
array
str,unicode
string
int,long,float
number
Truetrue
Falsefalse
None
null

  其实在JSON的解码过程中,会存在从json原始类型向python类型的转化过程,例子中有些数据类型进行了改变,如字符转换为了Unicode;Json-->Python具体的转化如下:

object dict
arraylist
number(int)

int,long

number(real)float
trueTrue
falseFalse
nullNone
stringUnicode

  如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。如下例子:

import json
obj = [[1, 2, 3], 123, 123.123, ‘abc‘, {‘key1‘: (1, 2, 3), ‘key2‘: (4, 5, 6)},True,False,None]
print ‘*****Encoding*****‘
dus = json.dumps(obj)
print type(dus)
print dus
print ‘*****Decoding*****‘
los=json.loads(dus)
print type(los)
print los
# Writing JSON data
with open(‘data.json‘, ‘w‘) as f:
   json.dump(obj, f)
# Reading data back
with open(‘data.json‘, ‘r‘) as f:
   data = json.load(f)
   
data.json文件:
[[1, 2, 3], 123, 123.123, "abc", {"key2": [4, 5, 6], "key1": [1, 2, 3]}, true, false, null]

  从例子中可以看出:

  编码过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串;

  解码过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。两个函数的唯一区别就是load把python对象转换成json对象生成一个fp的文件流,而loads则是生成了一个字符串;

  除了上述简单的用法外,dump的第一个参数是对象字典,第二个参数是文件对象,可以直接将转换后的json数据写入文件,dumps的第一个参数是对象字典,其余都是可选参数。dump和dumps的可选参数相同,这些参数都相当实用,如下:

  ensure_ascii 默认为True,保证转换后的json字符串中全部是ascii字符,非ascii字符都会被转义。如果数据中存在中文或其他非ascii字符,最好将ensure_ascii设置为False,保证输出结果正常;

  indent 缩进,默认为None,没有缩进,设置为正整数时,输出的格式将按照indent指定的半角空格数缩进;

  separators 设置分隔符,默认的分隔符是(‘,‘,‘:‘),如果需要自定义json中的分隔符,例如调整冒号前后的空格数,可以按照(item_separator, key_separator)的形式设置;

  sort_keys 默认为False,设为True时,输出结果将按照字典中的key排序;

  如下例子:

import json
ject=[{"name":"测试","age":16},(2,3),1]
dus = json.dumps(ject)
ass=json.dumps(ject,ensure_ascii=False)
sor=json.dumps(ject,sort_keys=True)
ind=json.dumps(ject,sort_keys=True,indent=4)
se=json.dumps(ject,separators=(‘,‘,‘:‘))
print ass
print dus
print sor
print ind
print se

运行结果:
[{"age": 16, "name": "测试"}, [2, 3], 1]
[{"age": 16, "name": "\u6d4b\u8bd5"}, [2, 3], 1]
[{"age": 16, "name": "\u6d4b\u8bd5"}, [2, 3], 1]
[
   {
       "age": 16,
       "name": "\u6d4b\u8bd5"
   },
   [
       2,
       3
   ],
   1
]
[{"age":16,"name":"\u6d4b\u8bd5"},[2,3],1]

本文出自 “DreamScape” 博客,请务必保留此出处http://dyqd2011.blog.51cto.com/3201444/1981281

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

实用代码片段将json数据绑定到html元素 (转)

json 可视代码工作室Angular with Firebase片段

vs code 用户代码片段 html.json

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

如何在android中将json数据加载到片段中

cmd 上运行 .py pthon 文件