详解Python使用simplejson模块解析JSON的方法
1,Json模块介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
2,Json的格式
2.1,对象:
{name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.jb51.net"} { 属性 : 值 , 属性 : 值 , 属性 : 值 }
2.2,数组:
是有顺序的值的集合。一个数组开始于"[",结束于"]",值之间用","分隔。
[ {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.jb51.net"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.jb51.net"}, {name:"Peggy",email:"peggy@gmail.com",homepage:"http://www.jb51.net"} ]
3,Json的导入导出
这里的write/dump的含义是将Json对象输入到一个python_object中,如果python_object是文件,则dump到文件中;如果是对象,则dump到内存中。这是序列化。
3.1,读取Json文件
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,显示Json文件
为了显示Json格式好看,原来的Json文件:
[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'}]
执行文件:
import simplejson as json jsonobject = json.load(file('table.json')) print json.dumps(jsonobject,sort_keys=True,indent=4)
显示:
[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模块示例:
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模块 示例:
import simplejson # Converting Python to JSON json_object = simplejson.dumps( python_object ) # Converting JSON to Python python_object = simplejson.loads( json_object )
其中的json_object也可以是文件名比如file(“tmp/table.json”)
4,Json数据的解析
假设对于data.json文件如下:
#test.py import simplejson as json ddata = json.loads(file("data.json")) print ddata print type(ddata)#<type 'dict'>
其次,我们以读字典中key 为”data”对应的键值
>>> ddata['data'] //查看字典的方法! >>>type(ddata['data']) <type 'list'>
发现ddata[‘data']是一个列表,列表就要用序号来查询
>>> ddata['data'][0] //查看列表的方法! >>> type(ddata['data'][0]) <type 'dict'>
ddata[‘data']列表的0号元素是个字典。。
好,那我们查查key为idc的键值是多少
>>> ddata['data'][0]['idc'] //查看字典的方法! >>> ddata['data'][0]['idc'] //查看字典的方法! '\xe6\x9d\xad\xe5\xb7\x9e\xe5\xbe\xb7\xe8\x83\x9c\xe6\x9c\xba\xe6\x88\xbf' >>> print ddata['data'][0]['idc'] 杭州德胜机房
5.一些性能讨论
简单测试了一下,如果用JSON,也就是python2.6以上自带的json处理库,效率还算可以:
1K的数据,2.9GHz的CPU,单核下每秒能dump:36898次。大约是pyamf的5倍。但数据量较大,约为pyamf的1.67倍(1101/656)。
start_time: 1370747463.77 loop_num: 36898 end_time: 1370747464.78
再看看simplejson,没有安装C扩展的情况下:
simplejson,没有安装C扩展,跑出的结果让我惊讶:
start_time: 1370748132.87 loop_num: 1361 end_time: 1370748133.88
效率如此之低下。
下面是测试代码:
#! /usr/bin/env python #coding=utf-8 import time import json test_data = { 'baihe': { 'name': unicode('百合', 'utf-8'), 'say': unicode('清新,淡雅,花香', '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, 'probability' : { '98': {'chips' : (5, 25), }, '2' : {'gem' : (1,1), }, }, }, '2':{ 'unlock' : {'chips':1000, 'FC':10,}, 'interval' : 12, 'probability' : { '70': {'chips' : (120, 250), }, '20': {'gem' : (1,1), }, '10': {'gem' : (2,2), }, }, }, 'one':{ '10,5' :{'id':'m01', 'Y':1, 'msg':u'在罐子里发现了一个银币!',}, '3,7' :{'id':'m02', 'Y':10,'msg':u'发现了十个银币!好大一笔钱!',}, '15,5' :{'id':'m03', 'Y':2, 'msg':u'一只老鼠跑了过去',}, '7,4' :{'id':'m04', 'Y':4, 'msg':u'发现了四个生锈的银币……',}, '2,12' :{'id':'m05', 'Y':6, 'msg':u'六个闪亮的银币!',}, }, } 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 ,a
总结:python自带的json,性能可以接受。simplejson,如果没有C扩展加速,效率极其低下。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

VSコードは、Microsoftが開発した無料のオープンソースクロスプラットフォームコードエディターと開発環境であるフルネームVisual Studioコードです。幅広いプログラミング言語をサポートし、構文の強調表示、コード自動完了、コードスニペット、および開発効率を向上させるスマートプロンプトを提供します。リッチな拡張エコシステムを通じて、ユーザーは、デバッガー、コードフォーマットツール、GIT統合など、特定のニーズや言語に拡張機能を追加できます。 VSコードには、コードのバグをすばやく見つけて解決するのに役立つ直感的なデバッガーも含まれています。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。
