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

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

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

簡(jiǎn)介

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

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

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

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

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

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

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

"Hello, World!"

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

42  
3.14159

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

true  
false

6.null:null在JSON中表示一個(gè)空值或者不存在的對(duì)象。

null

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

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

JSON的特點(diǎn)

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

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

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

5、可嵌套性:值可以是一個(gè)對(duì)象,對(duì)象的值又可以是一個(gè)對(duì)象。

Postgres中json vs jsonb

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

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

使用教程

登錄MemFire Cloud平臺(tái),創(chuàng)建一個(gè)應(yīng)用,點(diǎn)擊進(jìn)入應(yīng)用詳情,找到SQL編輯器工具;

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

在這個(gè)例子中,id是一個(gè)自增的主鍵,titleauthorpublished_date是常規(guī)的文本和日期字段,而metadata是一個(gè)jsonb字段,用于存儲(chǔ)書籍的元數(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對(duì)象是否包含特定的鍵值對(duì)

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

索引

為了提高查詢性能,我們可以對(duì)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字段中刪除特定的鍵值對(duì),可以使用jsonb_strip_nullsjsonb_set結(jié)合:

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

這會(huì)將ID為1的書籍的some_keymetadata中刪除。

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

驗(yàn)證* JSON*數(shù)據(jù)

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

現(xiàn)在,你可以向表中添加一個(gè)“檢查約束”,以驗(yà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ù)類型的詳細(xì)內(nèi)容,更多關(guān)于PostgreSQL使用JSON數(shù)據(jù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論