Python uses simplejson to parse JSON. simplejsonjson
1. Introduction to the Json Module
JSON (JavaScript Object Notation) is a lightweight data exchange format. Easy to read and write. It is also easy to parse and generate machines. It is based on a subset of JavaScript Programming Language, Standard ECMA-262 3rd Edition-December 1999. JSON uses a completely language-independent text format, but it also uses a habit similar to the C language family (including C, C ++, C #, Java, JavaScript, Perl, Python, and so on ). These features make JSON an ideal data exchange language.
2. Json format
2.1, object:
{Name: "Peggy", email: "peggy@gmail.com", homepage: "http://www.bkjia.com"} {property: value, property: value, property: Value}
2.2, array:
Is a set of ordered values. An array starts with "[", ends with "]", and values are separated.
[ {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.bkjia.com"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.bkjia.com"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.bkjia.com"} ]
In addition, the value can be a string, number, true, false, null, or an object or array. These structures can be nested.
3. Json Import and Export
Write/dump indicates that the Json object is input to a python_object. If python_object is a file, it is dumped to the file. If it is an object, it is dumped to the memory. This is serialization.
3.1. Read the Json File
import simplejson as json f = file('table.json') source = f.read() target = json.JSONDecoder().decode(source) print target import simplejson as json jsonobject = json.load(file('table.json')) print jsonobject
3.2. display the Json File
The original Json file is as follows:
[admin@r42h06016.xy2.aliyun.com]$python readJson.py [{'Query': 'desc zt1;', 'Message': '{"DescibeTableWithPartSpec": "false", "GetTableMetaString":"{\\"tableName\\":\\"zt1\\",\\"owner\\":\\"1365937150772213\\",\\"createTime\\":1346218114,\\"lastModifiedTime\\":0,\\"columns\\":[{\\"name\\":\\"a\\",\\"type\\":\\"string\\"},{\\"name\\":\\"b\\",\\"type\\":\\"string\\"}],\\"partitionKeys\\":[{\\"name\\":\\"pt\\",\\"type\\":\\"string\\"}]}"}', 'QueryID': '', 'Result': 'OK'}]
Execution file:
import simplejson as json jsonobject = json.load(file('table.json')) print json.dumps(jsonobject,sort_keys=True,indent=4)
Display:
[admin@r42h06016.xy2.aliyun.com]$python readJson.py [ { "Message": "{\"DescibeTableWithPartSpec\": \"false\", \"GetTableMetaString\":\"{\\\"tableName\\\":\\\"zt1\\\",\\\"owner\\\":\\\"1365937150772213\\\",\\\"createTime\\\":1346218114,\\\"lastModifiedTime\\\":0,\\\"columns\\\":[{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"b\\\",\\\"type\\\":\\\"string\\\"}],\\\"partitionKeys\\\":[{\\\"name\\\":\\\"pt\\\",\\\"type\\\":\\\"string\\\"}]}\"}", "Query": "desc zt1;", "QueryID": "", "Result": "OK" } ]
3.3, json module example:
import json # Converting Python to JSON json_object = json.write( python_object ) # Converting JSON to Python python_object = json.read( json_object )
3.4, simplejson module example:
import simplejson # Converting Python to JSON json_object = simplejson.dumps( python_object ) # Converting JSON to Python python_object = simplejson.loads( json_object )
The json_object can also be a file name, such as file ("tmp/table. json ")
4. Json data parsing
Assume that the data. json file is as follows:
Copy codeThe Code is as follows:
{'Issuccess': True, 'errormsg ': '', 'Total': 1, 'data': [{'isonline': True, 'idc ': '\ xe6 \ x9d \ xad \ xe5 \ xb7 \ x9e \ xe5 \ xbe \ xb7 \ xe8 \ x83 \ x9c \ xe6 \ x9c \ xba \ xe6 \ x88 \ xbf ', 'assetsnum': 'b5007000007003', 'responsibilityperson': '\ xe5 \ xbc \ xa0 \ xe4 \ xb9 \ x8b \ xe8 \ xaf \ x9a', 'devicemodel ': 'poweredge 200', 'servicetag': '729hh2x', 'IP': '123. 16.20.163 ', 'hostname': 'hzshterm1 .alibaba.com', 'manageip': '2017. 31.58.223 ', 'Cabinet': 'h05 ', 'buckettime': '2017-06-29', 'usestate ': '\ xe4 \ xbd \ xbf \ xe7 \ x94 \ xa8 \ xe4 \ xb8 \ xad', 'memoryinfo': {'amount ': 4, 'SIZE': 8192 }, 'cpuinfo': {'corenum': 8, 'l2cachesize': 6144, 'amount': 2, 'model': 'intel (R) Xeon (R) CPU E5405 @ 2.00GHz ', 'masterfrequency': 1995}, 'cabinetpositionnum': '', 'outguaranteetime':'', 'logicsite ': '\ xe4 \ xb8 \ xad \ xe6 \ x96 \ x87 \ xe7 \ xab \ x99'}]}
First, import the file, create a Json object, and view the type. It is already of the dict type.
#test.py import simplejson as json ddata = json.loads(file("data.json")) print ddata print type(ddata)#<type 'dict'>
Second, we use the key value corresponding to "data" as the key in the read dictionary.
>>> Ddata ['data'] // view the dictionary! >>> Type (ddata ['data']) <type 'LIST'>
Ddata ['data'] is a list, and the list must be queried by serial number.
>>> Ddata ['data'] [0] // Method for viewing the list! >>> Type (ddata ['data'] [0]) <type 'dict '>
The element 0 in the ddata ['data'] list is a dictionary ..
Okay. Let's check the idc key value.
>>> Ddata ['data'] [0] ['idc '] // you can view the dictionary. >>> Ddata ['data'] [0] ['idc '] // you can view the dictionary! '\ Xe6 \ x9d \ xad \ xe5 \ xb7 \ x9e \ xe5 \ xbe \ xb7 \ xe8 \ x83 \ x9c \ xe6 \ x9c \ xba \ xe6 \ x88 \ xbf'>> print ddata ['data'] [0] ['idc '] Hangzhou desheng data center
5. Some performance discussions
After a simple test, if JSON is used, that is, the built-in json processing library of python2.6 or above, the efficiency can be calculated as follows:
1 k Data, 36898 GHz CPU, single core per second dump: Times. It is about 5 times that of pyamf. However, the data volume is large, which is about 1.67 times (1101/656) of pyamf ).
start_time: 1370747463.77loop_num: 36898end_time: 1370747464.78
Let's take a look at simplejson. If the C extension is not installed:
Simplejson, without the C extension installed, I was surprised by the result:
start_time: 1370748132.87loop_num: 1361end_time: 1370748133.88
The efficiency is so low.
The following is the test code:
#! /Usr/bin/env python # coding = UTF-8 import time json test_data = {'weight': {'name': unicode ('lily', 'utf-8 '), 'put': unicode ('fresh, elegant, floral, utf-8'), 'grow _ time': 0.5, 'Fruit _ time': 0.5, 'Super _ time': 0.5, 'total _ time': 1, 'buy': {'gold': 2,}, 'Harvest _ fruit ': 1, 'Harvest _ super': 1, 'sale': 1, 'level _ need': 0, 'experience ': 2, 'exp _ fruit': 1, 'exp _ super': 1, 'used': True,}, '1': {'interval ': 0.3, 'bability ': {'98': {'chips ': (5, 25),}, '2': {'G ': (1000) ,},}, '2': {'unlock': {'chips ':, 'fc': 10,}, 'interval ': 12, 'bability ': {'70': {'chips': (120,250),}, '20': {'gem ': (),}, '10 ': {'gems ': () ,},},}, 'one': {'10, 5': {'id': 'm01', 'y ': 1, 'msg ': U' found a silver coin in the jar! ',}, '3, 7': {'id': 'm02', 'y': 10, 'msg': U' found ten silver coins! A huge amount of money! ',}, '15, 5': {'id': 'm03', 'y': 2, 'msg ': u'a mouse ran past ',}, '7, 4': {'id': 'm04', 'y': 4, 'msg ': u' found four Rusty silver coins ...... ',}, '2, 12': {'id': 'm05', 'y': 6, 'msg ': U' six shiny silver coins! ',} Start_time = time. time () print "start_time:", start_time j = 1 while True: j + = 1 a = json. dumps (test_data) data_length = len (a) end_time = time. time () if end_time-start_time> = 1: break print "loop_num:", j print "end_time:", end_time print data_length,
Summary: python's built-in json is acceptable in terms of performance. Simplejson, without C extension acceleration, is extremely inefficient.
Articles you may be interested in:
- Make python json encode datetime type
- Basic Method for parsing JSON data using Python
- Brief Introduction to JSON usage in Python
- Python reads json files and inserts data into mongodb
- Python automatic formatting of json files
- Examples of conversion between dictionaries and JSON in Python
- Convert a dictionary to its json string in python
- A simple example of using Python to operate json data
- Python processes Chinese Characters in json data
- Python json parsing instance method