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扩展加速,效率极其低下。

この記事では、バージョン3.10で導入されたPythonの新しい「マッチ」ステートメントについて説明します。これは、他の言語のスイッチステートメントに相当するものです。コードの読みやすさを向上させ、従来のif-elif-elよりもパフォーマンスの利点を提供します

Python 3.11の例外グループは、複数の例外を同時に処理することで、同時シナリオと複雑な操作でエラー管理を改善します。

Pythonの関数注釈は、タイプチェック、ドキュメント、およびIDEサポートの関数にメタデータを追加します。それらはコードの読みやすさ、メンテナンスを強化し、API開発、データサイエンス、ライブラリの作成において重要です。

この記事では、Pythonの単体テスト、その利点、およびそれらを効果的に書く方法について説明します。テスト用のUnittestやPytestなどのツールを強調しています。

記事では、Pythonのアクセス仕様について説明します。Pythonは、厳格な執行ではなく、クラスメンバーの可視性を示すために命名規則を使用します。

記事では、Pythonの\ _ \ _ init \ _ \ _()メソッドと、オブジェクト属性の初期化における自己の役割について説明します。 \ _ \ _ init \ _ \ _()に対するその他のクラス方法と継承の影響についてもカバーされています。

この記事では、@ClassMethod、@StaticMethod、およびPythonのインスタンスメソッドの違いについて説明し、そのプロパティ、ユースケース、および利点を詳述します。必要な機能とDAに基づいて適切な方法タイプを選択する方法を説明します

inpython、youappendelementStoalistusingtheappend()method.1)useappend()forsingleelements:my_list.append(4).2)useextend()or = formultipleElements:my_list.extend(another_list)ormy_list = [4,5,6] .3)forspecificpositions:my_list.insert(1,5).beaware


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

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

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









