zoukankan      html  css  js  c++  java
  • Python 处理 JSON文件

            JSONJavaScript Object Notation,JavaScript对象表示法,读作/ˈdʒeɪsən/)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。

             JSON 数据格式与语言无关。即便它源自JavaScript,但当前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json

    JSON 语法规则

    JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。
    JSON是一个序列化的对象或数组。
    1. 六个构造字符:
      begin-array = ws %x5B ws ; [ 左方括号
      begin-object = ws %x7B ws ; { 左大括号
      end-array = ws %x5D ws ; ] 右方括号
      end-object = ws %x7D ws ; } 右大括号
      name-separator = ws %x3A ws ; : 冒号
      value-separator = ws %x2C ws ; , 逗号
    2. 在这六个构造字符的前或后允许存在无意义的空白符(ws):
      ws = *(%x20 /; 空间
      %x09 /; 水平标签
      %x0A /; 换行或换行
      %x0D); 回程
    3.JSON的值:
      3.1 JSON的构成: ws 值 ws [1] 
      3.2值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
        3.2.1对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:
    1
        {"name""John Doe""age": 18, "address": {"country" "china""zip-code""10000"}}
        3.2.2数组是由方括号括起来的一组值构成,如:
    1
    [3, 1, 4, 1, 5, 9, 2, 6]
        3.2.3 字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
        3.2.4数字也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。 [2] 
    一些合法的JSON的实例:
    1
    {"a": 1, "b": [1, 2, 3]}
    1
    [1, 2, "3", {"a": 4}]
    1
    3.14
    1
    "plain_text"
     

    JSON 与 JS 对象的关系

    很多人搞不清楚 JSON 和 JS 对象的关系,甚至连谁是谁都不清楚。其实,可以这么理解:
    JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
    1
    var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
    1
    var json = '{"a": "Hello", "b": "World"}'//这是一个 JSON 字符串,本质是一个字符串
     

    JSON 和 JS 对象互转

    要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:
    1
    var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
    要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:
    1
    var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
     

    常用类型

      任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。
      对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。在面向对象的语言中,key 为对象的属性,value 为对应的值。键名可以使用整数和字符串来表示。值的类型可以是任意类型。
      数组:数组在 JS 中是方括号 [] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。

    Python使用json函数

    使用之前,首先需要导入json模块,import json

    1)、json.dumps()函数

    该函数是将 Python 对象编码成 JSON 字符串,例如:

    复制代码
     1 import json                                                                                         
     2 d={'谦谦':{'sex':'男','addr':'北京','age':34},'千千':{ 'sex':'女','addr':'北京', 'age':34}}                  
     3 print(json.dumps(d,ensure_ascii=False,indent=4))  #字典转成json,字典转换成字符串 加上ensure_ascii=False以后,可以识别中文, indent=4是间隔4个空格显示
     4 
     5 #以上代码转换的结果是:
     6 {
     7     "谦谦": {
     8         "sex": "男",
     9         "addr": "北京",
    10         "age": 34
    11     },
    12     "千千": {
    13         "sex": "女",
    14         "addr": "北京",
    15         "age": 34
    16     }
    17 }

    2)、json.dump()函数

    该函数是可以将 Python 对象编码成 JSON 字符串,并自己帮你写入到文件中,不需要再单独写文件,例如:

    1 import json                                                                         
    2 d={'谦谦':{'sex':'男','addr':'北京','age':34},'千千':{ 'sex':'女','addr':'北京', 'age':34},}  
    3 fw =open('user_info.json','w',encoding='utf-8')   #打开一个名字为‘user_info.json’的空文件
    4 json.dump(d,fw,ensure_ascii=False,indent=4)#字典转成json,字典转换成字符串,不需要写文件,自己帮你将转成的json字符串写入到‘user_info.json’的文件中 

    3)、json.loads()函数

    文件product.json的原文件内容如下:

    {
        "iphone":{
            "color":"red",
            "num":1,
            "price":98.5
        },
        "wather":{
            "num":100,
            "price":1,
            "color":"white"
        }
    }
    复制代码

    使用json.loads()函数把json串变成python的数据类型:如下:

    1 import json  
    2 f =open('product.json',encoding='utf-8') #打开‘product.json’的json文件
    3 res=f.read()  #读文件
    4 print(json.loads(res))#把json串变成python的数据类型:字典      
    5 
    6 #以上转换的结果是:
    7 {'iphone': {'color': 'red', 'num': 1, 'price': 98.5}, 'wather': {'num': 100, 'price': 1, 'color': 'white'}} 
    复制代码

    4)、json.load()函数

    该函数把json串变成python的数据类型:字典,传一个文件对象,它会帮你读文件,不需要再单独读文件,例如:

    复制代码
    import json   
    f =open('product.json',encoding='utf-8')    #打开文件 
    print(json.load(f))#把json串变成python的数据类型:字典,传一个文件对象,它会帮你读文件,不需要再单独读文件 
    
    #以上转换执行的结果是:
    {'iphone': {'color': 'red', 'num': 1, 'price': 98.5}, 'wather': {'num': 100, 'price': 1, 'color': 'white'}}
  • 相关阅读:
    ActiveX控件开发 C#
    sql server中新增一条数据后返回该数据的ID
    数据库设计之用户-角色-权限分配
    C#面向对象基础
    单片机通讯协议
    MSDN上的异步socket 服务端例子
    文件操作
    socket+select模型
    HSV颜色模型
    视觉软件需要考虑的10个方面
  • 原文地址:https://www.cnblogs.com/cjtds/p/12221276.html
Copyright © 2011-2022 走看看