本文目錄一覽:
如何用python把protobuf轉化json
直接利用python提供的json包,在django model的定義中增加一個方法toJSON,利用django model 能訪問 _meta.fields 得到相關屬性而得到,例子如下:
class Category(models.Model):
autoid = models.AutoField(primary_key=True)
email=models.CharField(max_length=150,blank=False)
comtype=models.CharField(max_length=20,blank=False)
catname=models.CharField(max_length=150,blank=False)
def __unicode__(self):
return ‘%s’ % (self.catname)
def toJSON(self):
import json
return json.dumps(dict([(attr, getattr(self, attr)) for attr in [f.name for f in self._meta.fields]]))
然後用django查出數據,並轉換成json,代碼如下:
row=models.Category.objects.get(autoid=23)
print row.toJSON()
mysql對json取值路徑怎麼設置變數
我們知道,JSON是一種輕量級的數據交互的格式,大部分NO SQL資料庫的存儲都用JSON。MySQL從5.7開始支持JSON格式的數據存儲,並且新增了很多JSON相關函數。MySQL 8.0 又帶來了一個新的把JSON轉換為TABLE的函數JSON_TABLE,實現了JSON到表的轉換。
舉例一
我們看下簡單的例子:
簡單定義一個兩級JSON 對象
mysql set @ytt='{“name”:[{“a”:”ytt”,”b”:”action”}, {“a”:”dble”,”b”:”shard”},{“a”:”mysql”,”b”:”oracle”}]}’;Query OK, 0 rows affected (0.00 sec)
第一級:
mysql select json_keys(@ytt);+—————–+| json_keys(@ytt) |+—————–+| [“name”] |+—————–+1 row in set (0.00 sec)
第二級:
mysql select json_keys(@ytt,’$.name[0]’);+—————————–+| json_keys(@ytt,’$.name[0]’) |+—————————–+| [“a”, “b”] |+—————————–+1 row in set (0.00 sec)
我們使用MySQL 8.0 的JSON_TABLE 來轉換 @ytt。
mysql select * from json_table(@ytt,’$.name[*]’ columns (f1 varchar(10) path ‘$.a’, f2 varchar(10) path ‘$.b’)) as tt;
+——-+——–+
| f1 | f2 |
+——-+——–+
| ytt | action |
| dble | shard |
| mysql | oracle |
+——-+——–+
3 rows in set (0.00 sec)
舉例二
再來一個複雜點的例子,用的是EXPLAIN 的JSON結果集。
JSON 串 @json_str1。
set @json_str1 = ‘ { “query_block”: { “select_id”: 1, “cost_info”: { “query_cost”: “1.00” }, “table”: { “table_name”: “bigtable”, “access_type”: “const”, “possible_keys”: [ “id” ], “key”: “id”, “used_key_parts”: [ “id” ], “key_length”: “8”, “ref”: [ “const” ], “rows_examined_per_scan”: 1, “rows_produced_per_join”: 1, “filtered”: “100.00”, “cost_info”: { “read_cost”: “0.00”, “eval_cost”: “0.20”, “prefix_cost”: “0.00”, “data_read_per_join”: “176” }, “used_columns”: [ “id”, “log_time”, “str1”, “str2” ] } }}’;
第一級:
mysql select json_keys(@json_str1) as ‘first_object’;+—————–+| first_object |+—————–+| [“query_block”] |+—————–+1 row in set (0.00 sec)
第二級:
mysql select json_keys(@json_str1,’$.query_block’) as ‘second_object’;+————————————-+| second_object |+————————————-+| [“table”, “cost_info”, “select_id”] |+————————————-+1 row in set (0.00 sec)
第三級:
mysql select json_keys(@json_str1,’$.query_block.table’) as ‘third_object’\G*************************** 1. row ***************************third_object: [“key”,”ref”,”filtered”,”cost_info”,”key_length”,”table_name”,”access_type”,”used_columns”,”possible_keys”,”used_key_parts”,”rows_examined_per_scan”,”rows_produced_per_join”]1 row in set (0.01 sec)
第四級:
mysql select json_extract(@json_str1,’$.query_block.table.cost_info’) as ‘forth_object’\G*************************** 1. row ***************************forth_object: {“eval_cost”:”0.20″,”read_cost”:”0.00″,”prefix_cost”:”0.00″,”data_read_per_join”:”176″}1 row in set (0.00 sec)
那我們把這個JSON 串轉換為表。
SELECT * FROM JSON_TABLE(@json_str1,
“$.query_block”
COLUMNS(
rowid FOR ORDINALITY,
NESTED PATH ‘$.table’
COLUMNS (
a1_1 varchar(100) PATH ‘$.key’,
a1_2 varchar(100) PATH ‘$.ref[0]’,
a1_3 varchar(100) PATH ‘$.filtered’,
nested path ‘$.cost_info’
columns (
a2_1 varchar(100) PATH ‘$.eval_cost’ ,
a2_2 varchar(100) PATH ‘$.read_cost’,
a2_3 varchar(100) PATH ‘$.prefix_cost’,
a2_4 varchar(100) PATH ‘$.data_read_per_join’
),
a3 varchar(100) PATH ‘$.key_length’,
a4 varchar(100) PATH ‘$.table_name’,
a5 varchar(100) PATH ‘$.access_type’,
a6 varchar(100) PATH ‘$.used_key_parts[0]’,
a7 varchar(100) PATH ‘$.rows_examined_per_scan’,
a8 varchar(100) PATH ‘$.rows_produced_per_join’,
a9 varchar(100) PATH ‘$.key’
),
NESTED PATH ‘$.cost_info’
columns (
b1_1 varchar(100) path ‘$.query_cost’
),
c INT path “$.select_id”
)
) AS tt;
+——-+——+——-+——–+——+——+——+——+——+———-+——-+——+——+——+——+——+——+
| rowid | a1_1 | a1_2 | a1_3 | a2_1 | a2_2 | a2_3 | a2_4 | a3 | a4 | a5 | a6 | a7 | a8 | a9 | b1_1 | c |
+——-+——+——-+——–+——+——+——+——+——+———-+——-+——+——+——+——+——+——+
| 1 | id | const | 100.00 | 0.20 | 0.00 | 0.00 | 176 | 8 | bigtable | const | id | 1 | 1 | id | NULL | 1 |
| 1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1.00 | 1 |
+——-+——+——-+——–+——+——+——+——+——+———-+——-+——+——+——+——+——+——+
2 rows in set (0.00 sec)
當然,JSON_table 函數還有其他的用法,我這裡不一一列舉了,詳細的參考手冊。
請點擊輸入圖片描述
初學Python照著寫了個爬蟲不知道錯誤在哪,怎麼改?
這是初學者經常犯的錯誤:
reply_info = json.loads(each.xpath(‘@data-field’)[0].replace(‘”‘,”))
reply_info這個數組有可能為0,所以要加個判斷,讓代碼在該數組為空時也能跑,如下:
field_01 = each.xpath(‘@data-field’)
if len(field_01) == 0:
continue
reply_info = json.loads(field_01[0].replace(‘”‘,”))
同理,下面獲取content和reply_time的數據時,也需要加入這個判斷,以後寫代碼也要養成這個習慣,加油~
Python模塊的幾種類型簡介
1、系統內置模塊
os模塊:os模塊包含普遍的操作系統功能
sys模塊:提供了一系列有關Python運行環境的變數和函數
random模塊:random模塊用於生成隨機數
time 模塊: 主要包含各種提供日期、時間功能的類和函數
datetime模塊:對time模塊的一個高級封裝
shutil模塊:是一種高層次的文件操作工具
logging模塊:將日誌列印到了標準輸出中
re模塊:可以直接調用來實現正則匹配
pymysql模塊:連接資料庫,並實現簡單的增刪改查
threading模塊:提供了更強大的多線程管理方案
queue模塊:實現了多生產者,多消費者的隊列
json模塊:用於字元串和數據類型間進行轉換json
2、開源(三方)模塊
Requests:最富盛名的http庫。每個Python程序員都應該有它。
Scrapy:從事爬蟲相關的工作,這個庫也是必不可少的。
NumPy:為Python提供了很多高級的數學方法。
matplotlib:一個繪製數據圖的庫。對於數據分析師非常有用。
Pygame:開發2D遊戲的時候可以用上 。
Scapy:用Python寫的數據包探測和分析庫。
Django:開源Web開發框架,它鼓勵快速開發,並遵循MVC設計,開發周期短。
Py2exe:將python腳本轉換為windows上可以獨立運行的可執行程序。
BeautifulSoup:基於Python的HTML/XML解析器,簡單易用。
PyGtk:基於Python的GUI程序開發GTK+庫。
3、自定義模塊
自定義模塊是自己寫的模塊,對某段邏輯或某些函數進行封裝後供其他函數調用。
注意:自定義模塊的命名一定不能和系統內置的模塊重名了,否則將不能再導入系統的內置模塊了。
例如:自定義了一個sys.py模塊後,再想使用系統的sys模塊是不能使用的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238637.html