欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解如何在PostgreSQL中使用JSON數(shù)據(jù)類型

 更新時間:2024年03月22日 11:58:28   作者:花菜123  
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它采用鍵值對的形式來表示數(shù)據(jù),支持多種數(shù)據(jù)類型,本文給大家介紹了如何在PostgreSQL中使用JSON數(shù)據(jù)類型,需要的朋友可以參考下

簡介

JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它采用鍵值對的形式來表示數(shù)據(jù),支持多種數(shù)據(jù)類型。JSON被廣泛應(yīng)用于Web應(yīng)用程序中,用于數(shù)據(jù)的傳輸和存儲。

JSON支持的數(shù)據(jù)類型

1.對象(Object): 對象在JSON中是被花括號{}包圍著的一系列鍵值對的集合,鍵與值之間使用冒號:分隔,不同鍵值對之間使用逗號,分隔。

{  
  "name": "John",  
  "age": 30,  
  "city": "New York"  
}

2.數(shù)組(Array) :數(shù)組在JSON中是用方括號[]包圍著的一系列值的有序集合,值之間使用逗號,分隔。

[  
  "apple",  
  "banana",  
  "cherry"  
]

3.字符串(String) :字符串必須被雙引號""包圍。

"Hello, World!"

4.數(shù)值(Number) :JSON中的數(shù)值可以是整數(shù)或浮點數(shù),不需要引號包圍。

42  
3.14159

5.布爾值(Boolean) :布爾值只有兩種,true 和 false,同樣不需要引號包圍。

true  
false

6.null:null在JSON中表示一個空值或者不存在的對象。

null

需要注意的是,JSON不支持JavaScript中的其他數(shù)據(jù)類型,比如函數(shù)或Date對象。如果需要在JSON中傳遞復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如日期,通常需要將其轉(zhuǎn)換為字符串或數(shù)字,并在解析時將其轉(zhuǎn)回原始數(shù)據(jù)類型。

JSON的這種簡潔、清晰的格式使得它成為前后端數(shù)據(jù)交換的常用方式,尤其是在Web服務(wù)(如RESTful API)中,JSON是首選的數(shù)據(jù)格式。

JSON的特點

1、簡潔和易讀:JSON使用簡潔的文本格式,易于閱讀和編寫;

3、可擴展性:支持多種數(shù)據(jù)類型,可以靈活地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);

4、跨平臺,JSON可以被多種編程語言支持和解析,可以在不同的平臺間進行數(shù)據(jù)交換;

5、可嵌套性:值可以是一個對象,對象的值又可以是一個對象。

Postgres中json vs jsonb

Postgres支持存儲和查詢非結(jié)構(gòu)化數(shù)據(jù)。Postgres支持兩種存儲json數(shù)據(jù)的數(shù)據(jù)類型:json(以字符串形式存儲)和jsonb(以二進制形式存儲)。盡管它們都用于存儲 JSON 數(shù)據(jù),但它們之間存在一些重要的差異。

對比項json類型jsonb類型
存儲格式以純文本的形式存儲JSON數(shù)據(jù)二進制格式存儲 JSON 數(shù)據(jù)
性能插入數(shù)據(jù)速度更快對于復(fù)雜的查詢(如搜索、比較或修改 JSON 結(jié)構(gòu)中的數(shù)據(jù)),性能可能較差在插入數(shù)據(jù)時 jsonb 可能比 json 稍慢一些;jsonb 支持索引,進行復(fù)雜查詢、修改性能更優(yōu)。
用途簡單地存儲JSON格式的數(shù)據(jù)、不需要頻繁修改JSON結(jié)構(gòu)或進行復(fù)雜查詢的場景,比如日志記錄或某些不需要進行復(fù)雜處理的配置數(shù)據(jù)。當你需要對 JSON 數(shù)據(jù)進行復(fù)雜查詢、修改或驗證時,jsonb 是更好的選擇。例如,你可以使用 jsonb 來存儲用戶數(shù)據(jù),并根據(jù)其中的特定字段進行查詢或更新

使用教程

登錄MemFire Cloud平臺,創(chuàng)建一個應(yīng)用,點擊進入應(yīng)用詳情,找到SQL編輯器工具;

創(chuàng)建數(shù)據(jù)表

在這個例子中,id是一個自增的主鍵,title、authorpublished_date是常規(guī)的文本和日期字段,而metadata是一個jsonb字段,用于存儲書籍的元數(shù)據(jù)。

CREATE TABLE books (  
    id serial PRIMARY KEY,  
    title text NOT NULL,  
    author text NOT NULL,  
    published_date date NOT NULL,  
    metadata jsonb  
);

注意,我們使用::jsonb來將字符串轉(zhuǎn)換為jsonb類型。

插入數(shù)據(jù)

你可以像插入任何其他數(shù)據(jù)一樣插入JSON數(shù)據(jù)。數(shù)據(jù)必須是有效的JSON。

INSERT INTO books (title, author, published_date, metadata)  
VALUES (  
    'Effective PostgreSQL',  
    'Your Name Here',  
    '2023-01-01',  
    '{  
        "ISBN": "1234567890",  
        "publisher": "Your Publisher",  
        "pages": 300,  
        "language": "English"  
    }'::jsonb  
);

執(zhí)行成功后,在編輯器可以查看結(jié)果:

查詢數(shù)據(jù)

查詢JSON數(shù)據(jù)與其他數(shù)據(jù)類似,有一些額外的特性可以訪問嵌套值。Postgres支持一系列JSON函數(shù)和操作符。例如,->操作符將值作為jsonb數(shù)據(jù)返回。如果你想讓數(shù)據(jù)作為text返回,使用->>操作符。

SELECT * FROM books WHERE metadata->>'ISBN' = '1234567890';

執(zhí)行成功后,可以在SQL編輯器查看返回結(jié)果。

我們還可以使用更復(fù)雜的JSONB操作符和函數(shù)來執(zhí)行更復(fù)雜的查詢。例如,我們可以使用@>操作符來檢查JSONB對象是否包含特定的鍵值對

SELECT * FROM books WHERE metadata @> '{"ISBN": "1234567890"}';

索引

為了提高查詢性能,我們可以對jsonb字段創(chuàng)建GIN索引:

CREATE INDEX idxgin_metadata ON books USING gin(metadata);

這將大大提高涉及jsonb字段的查詢性能。

更新數(shù)據(jù)

使用jsonb_set函數(shù)可以更新jsonb字段中的特定值:

UPDATE books  
SET metadata = jsonb_set(metadata, '{ISBN}', '"9876543210"')  
WHERE id = 1;

執(zhí)行成功后,可以在SQL編輯器查看返回結(jié)果。

刪除數(shù)據(jù)

要從jsonb字段中刪除特定的鍵值對,可以使用jsonb_strip_nullsjsonb_set結(jié)合:

UPDATE books  
SET metadata = jsonb_strip_nulls(jsonb_set(metadata, '{some_key}', 'null'))  
WHERE id = 1;

這會將ID為1的書籍的some_keymetadata中刪除。

通過這些步驟,您可以在PostgreSQL中使用jsonb數(shù)據(jù)類型來存儲和管理書籍的元數(shù)據(jù)。

驗證* JSON*數(shù)據(jù)

MemFire Cloud新發(fā)布版本中提供了根據(jù)JSON Schema文檔驗證jsonjsonb數(shù)據(jù)類型的能力。在數(shù)據(jù)庫->擴展頁面,輸入框內(nèi)搜索json,找到擴展pg_jsonschema,點擊啟用,如下圖所示。

現(xiàn)在,你可以向表中添加一個“檢查約束”,以驗證JSON數(shù)據(jù):

create table customers (
    id serial primary key,
    metadata json
);
alter table customers
add constraint check_metadata check (
    json_matches_schema(
        '{
            "type": "object",
            "properties": {
                "tags": {
                    "type": "array",
                    "items": {
                        "type": "string",
                        "maxLength": 16
                    }
                }
            }
        }',
        metadata
    )
);

以上就是詳解如何在PostgreSQL中使用JSON數(shù)據(jù)類型的詳細內(nèi)容,更多關(guān)于PostgreSQL使用JSON數(shù)據(jù)類型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論