json數據格式說明

格式說明

  1. json文件由對象(集合)、數組、key/value元素組成,能夠相互嵌套。
  2. 使用大括號包圍的是對象,使用中括號包圍的是數組,冒號分隔的是元素。
  3. 元素的key只能是字符串。
  4. 元素的value數據類型能夠是:
    • number:整數和浮點數都屬於number類型,能夠是正負數
    • string:字符串
    • bool:true/false
    • array:使用中括號包圍的部分是array
    • object:使用大括號包圍的是對象
    • null:空。通常是這個值原本應該是某個object的,可是object不存在,因而爲Null
  5. 對象、數組容器中每一個元素之間使用逗號隔開,容器的最後一個元素不加逗號
  6. 頂級對象都是匿名的,也就是沒有key

下面是一個json格式數據的示例:python

{
    "id":1,
    "content":"hello world",
    "author":{
        "id":2,
        "name":"userA"
    },
    "published":true,
    "label":[],
    "nextPost":null,
    "comments":[
        {
            "id":3,
            "content":"good post1",
            "author":"userB"
        },
        {
            "id":4,
            "content":"good post2",
            "author":"userC"
        }
    ]
}

用註釋分析這個json:json

{ # 對象容器,下面全是這個對象中的屬性。注意key全都是字符串
    "id":1,   # 文章ID號,元素,value類型爲number
    "content":"hello world",  # 文章內容
    "author":{   # 子對象,文章做者
        "id":2,   # 做者ID
        "name":"userA"    # 做者名稱,注意子容器結束,沒有逗號
    },
    "published":true,   # 文章是否發佈,布爾類型
    "label":[],         # 文章標籤,沒有給標籤,因此空數組
    "nextPost":null,    # 下一篇文章,是對象,由於沒有,因此爲null
    "comments":[     # 文章評論,由於可能有多條評論,每條評論都是一個對象結構
        {     # 對象容器,表示評論對象
            "id":3,        # 評論的ID號
            "content":"good post1",    # 評論的內容
            "author":"userB"         # 評論者
        },
        {
            "id":4,
            "content":"good post2",
            "author":"userC"
        }
    ]
}

通常來講,json格式轉換成語言中的數據結構時,有如下幾個比較通用的規則(只是比較普通的方式,並不是必定):數組

  • json對象映射成語言中的hash/struct,有時候沒有合適的結構,將映射成類。其實class、hash、struct在數據組織方式上都是同樣的,都是key/value的容器
  • json數組映射成語言中的列表/數組/切片

例如,上面的示例,轉換成Go中的數據結構時,獲得的結果以下:數據結構

// 使用名稱A代替頂層的匿名對象
type A struct {
    ID        int64         `json:"id"`       
    Content   string        `json:"content"`  
    Author    Author        `json:"author"`   
    Published bool          `json:"published"`
    Label     []interface{} `json:"label"`    
    NextPost  interface{}   `json:"nextPost"` 
    Comments  []Comment     `json:"comments"` 
}

type Author struct {
    ID   int64  `json:"id"`  
    Name string `json:"name"`
}

type Comment struct {
    ID      int64  `json:"id"`     
    Content string `json:"content"`
    Author  string `json:"author"` 
}

好比轉換成python中的數據時,獲得的結果以下:工具

from typing import List, Any

class Author:
    id: int
    name: str

    def __init__(self, id: int, name: str) -> None:
        self.id = id
        self.name = name

class Comment:
    id: int
    content: str
    author: str

    def __init__(self, id: int, content: str, author: str) -> None:
        self.id = id
        self.content = content
        self.author = author

# 使用了名稱A代替頂層的匿名對象
class A:
    id: int
    content: str
    author: Author
    published: bool
    label: List[Any]
    next_post: None
    comments: List[Comment]

    def __init__(self, id: int, content: str, author: Author, published: bool, label: List[Any], next_post: None, comments: List[Comment]) -> None:
        self.id = id
        self.content = content
        self.author = author
        self.published = published
        self.label = label
        self.next_post = next_post
        self.comments = comments

json轉代碼數據結構推薦工具

quicktype工具,能夠輕鬆地將json文件轉換成各類語言對應的數據結構。post

地址:https://quicktype.ioui

在vscode中有相關插件插件

  1. 先在命令面板中輸入"set quicktype target language"選擇要將json轉換成什麼語言的數據結構
  2. 再輸入"open quicktype for json"就能夠將當前json文件轉換對應的數據結構。
相關文章
相關標籤/搜索