python之json處理


JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。

以上是網上對json的解釋,其實只要記住是一種輕量的數據交換格式就可以了,確實方便,可以把數據寫入文件中,也可將數據當做字符串使用,但需要注意的是:

1.字符串輸入json時,對元素需要使用雙引號,單引號容易出錯 2.數據寫入文件時,需要注意圓括號,也叫小括號,使用json.dump()默認會將有序排列轉化為列表存入json文件,所以如果你的數據中有元組的話需要注意這一點
3. json 字符串內部的字典、列表中的元素,如果是字符串的話,必須用雙引號

當然,最重要的還是需要先導入json模塊:

import json

字符串解析:

json.dumps()    #編碼:把一個Python對象編碼轉換成Json字符串
json.loads()        #解碼:把Json格式字符串解碼轉換成Python對象 

栗子:

add_contect_str=‘{"backend": "www.oldboy.org","record":{"server": "100.1.7.9","weight": 20,"maxconn": 3000}}’
add_contect=json.loads(add_contect_str)
 search_info=add_contect['backend']
 weight=add_contect['record']['weight']
 server=add_contect['record']['server']
 maxconn=add_contect['record']['maxconn']

文件解析:

文件內容:

{
 "汽車": {
  "BMW X3": {
   "price": 499999,
   "stock": 399,
   "belong": "汽車"
  },
  "PASST": {
   "price": 299999,
   "stock": 297,
   "belong": "汽車"
  },
  "Tesla Model S": {
   "price": 799999,
   "stock": 3000,
   "belong": "汽車"
  },
  "Porsche 911": {
   "price": 2999999,
   "stock": 594,
   "belong": "汽車"
  }
 },
 "手機": {
  "錘子2(這特么真是手機)": {
   "price": 998,
   "stock": 2994,
   "belong": "手機"
  },
  "華為Mate": {
   "price": 2999,
   "stock": 5996,
   "belong": "手機"
  },
  "Iphone": {
   "price": 5888,
   "stock": 2998,
   "belong": "手機"
  },
  "XiaoMi 4": {
   "price": 1999,
   "stock": 5396,
   "belong": "手機"
  }
 },
 "服裝": {
  "小白鞋": {
   "price": 900,
   "stock": 5964,
   "belong": "服裝"
  },
  "T恤": {
   "price": 300,
   "stock": 892,
   "belong": "服裝"
  },
  "驢牌腰帶": {
   "price": 9999,
   "stock": 2999,
   "belong": "服裝"
  },
  "Nudie牛仔褲": {
   "price": 699,
   "stock": 3978,
   "belong": "服裝"
  }
 },
 "電腦": {
  "Mac Air": {
   "price": 6999,
   "stock": 6002,
   "belong": "電腦"
  },
  "Mac pro": {
   "price": 9999,
   "stock": 3995,
   "belong": "電腦"
  },
  "IBM X240": {
   "price": 6999,
   "stock": 3003,
   "belong": "電腦"
  },
  "Surface Book": {
   "price": 8999,
   "stock": 3020,
   "belong": "電腦"
  }
 },
 "家電": {
  "洗衣機": {
   "price": 999,
   "stock": 597,
   "belong": "家電"
  },
  "彩電": {
   "price": 5000,
   "stock": 398,
   "belong": "家電"
  },
  "微波爐": {
   "price": 800,
   "stock": 2995,
   "belong": "家電"
  },
  "冰箱": {
   "price": 3000,
   "stock": 300,
   "belong": "家電"
  },
  "熱水器": {
   "price": 600,
   "stock": 900,
   "belong": "家電"
  }
 }
}

解析:

user_info=json.load(open('user_info','r'))        #讀數據
json.dump(goods,open('goods_info','w'),ensure_ascii=False,indent=1)    #寫入數據

其中,ensure_ascii=False表示不轉編碼,如果數據中有中文,沒有ensure_ascii參數時,會轉為亂碼。indent為縮進,讓數據看起來更有序,優雅的裝逼法則。

排序:sort_keys=True,排序使數據看起來更有序,雖然字典的是無序的,然並卵。。。

import json
data1 = {'b':789,'c':456,'a':123}
data2 = {'a':123,'b':789,'c':456}
d1 = json.dumps(data1,sort_keys=True)
d2 = json.dumps(data2)
d3 = json.dumps(data2,sort_keys=True)
print(d1)
print(d2)
print(d3)
print(d1==d2)

結果:

{"a": 123, "b": 789, "c": 456}
{"c": 456, "b": 789, "a": 123}
{"a": 123, "b": 789, "c": 456}
False
[Finished in 0.1s]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM