国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PostgreSQL JSON 類型詳解

這篇具有很好參考價(jià)值的文章主要介紹了PostgreSQL JSON 類型詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)介

JSON 代表 JavaScript Object Notation。它是一種開放標(biāo)準(zhǔn)格式,將數(shù)據(jù)組織成 RFC 7159 中詳述的鍵/值對(duì)和數(shù)組

為什么要在PostgreSQL中存儲(chǔ)JSON

  1. 架構(gòu)靈活性

    使用 JSON 格式存儲(chǔ)數(shù)據(jù)的主要原因之一是架構(gòu)靈活性。當(dāng)架構(gòu)不穩(wěn)定且頻繁更改時(shí),將數(shù)據(jù)存儲(chǔ)在 JSON 中非常有用。如果將每個(gè)鍵存儲(chǔ)為列,則會(huì)導(dǎo)致頻繁的 DML 操作 - 當(dāng)您的數(shù)據(jù)集很大時(shí),這可能很困難 - 例如,事件跟蹤、分析、標(biāo)簽等。注意:如果文檔中始終存在特定鍵,則將其存儲(chǔ)為第一類列可能是有意義的。我們將在下面的“JSON 模式和反模式”部分中討論有關(guān)此方法的更多信息。

  2. 嵌套對(duì)象

    如果您的數(shù)據(jù)集具有嵌套對(duì)象(單級(jí)或多級(jí)),在某些情況下,在 JSON 中處理它們比將數(shù)據(jù)非規(guī)范化為列或多個(gè)表更容易。

  3. 與外部數(shù)據(jù)源同步

    通常,外部系統(tǒng)以 JSON 形式提供數(shù)據(jù),因此在將數(shù)據(jù)攝取到系統(tǒng)的其他部分之前,它可能是臨時(shí)存儲(chǔ)。例如,條紋交易。

PostgreSQL 中對(duì) JSON 支持的時(shí)間點(diǎn)

1. PostgreSQL 9.2 (2012) 添加了對(duì) JSON 數(shù)據(jù)類型的支持

2. PostgreSQL 9.4 (2014) 添加了對(duì) JSONB 數(shù)據(jù)類型的支持

JSONB 支持為 JSON 數(shù)據(jù)編制索引,并且在解析和查詢 JSON 數(shù)據(jù)方面非常高效。在大多數(shù)情況下,當(dāng)你在 PostgreSQL 中使用 JSON 時(shí),你應(yīng)該使用 JSONB。

3. PostgreSQL 12(2019 年)增加了對(duì) SQL/JSON 標(biāo)準(zhǔn)和 JSONPATH 查詢的支持

JSONPath 為 PostgreSQL 帶來(lái)了強(qiáng)大的 JSON 查詢引擎。

什么時(shí)候應(yīng)該使用 JSON 而不是 JSONB?

在大多數(shù)情況下,JSONB 是您應(yīng)該使用的。但是,在某些特定情況下,JSON 效果更好:

  • JSON 保留原始格式(也稱為空格)和鍵的順序。
  • JSON 保留重復(fù)的鍵。
  • 與 JSONB 相比,JSON 的攝取速度更快 - 但是,如果您進(jìn)行任何進(jìn)一步的處理,JSONB 將更快。
    例如,如果您只是攝取 JSON 日志而不以任何方式查詢它們,那么 JSON 可能是更好的選擇

JSONB 運(yùn)算符和函數(shù)

PostgreSQL提供了各種運(yùn)算符來(lái)處理JSONB。從文檔中:

算子 描述
-> 獲取 JSON 數(shù)組元素(從零開始索引,從末尾開始計(jì)數(shù)負(fù)整數(shù))
-> 按鍵獲取 JSON 對(duì)象字段
->> 以文本形式獲取 JSON 數(shù)組元素
->> 以文本形式獲取 JSON 對(duì)象字段
#> 獲取指定路徑中的 JSON 對(duì)象
#>> 以文本形式獲取指定路徑處的 JSON 對(duì)象
@> 左側(cè) JSON 值是否在頂層包含正確的 JSON 路徑/值條目?
<@ 左側(cè) JSON 路徑/值條目是否包含在右側(cè) JSON 值中的頂層?
? _字符串_是否作為 JSON 值中的頂級(jí)鍵存在?
?| 這些數(shù)組_字符串_中的任何一個(gè)是否作為頂級(jí)鍵存在?
?& 所有這些數(shù)組_字符串_是否都作為頂級(jí)鍵存在?
| 將兩個(gè) jsonb 值連接成一個(gè)新的 jsonb 值
從左側(cè)操作數(shù)中刪除鍵/值對(duì)或_字符串_元素。鍵/值對(duì)根據(jù)其鍵值進(jìn)行匹配。
從左側(cè)操作數(shù)中刪除多個(gè)鍵/值對(duì)或_字符串_元素。鍵/值對(duì)根據(jù)其鍵值進(jìn)行匹配。
刪除具有指定索引的數(shù)組元素(從末尾開始計(jì)算負(fù)整數(shù))。如果頂級(jí)容器不是數(shù)組,則引發(fā)錯(cuò)誤。
#- 刪除具有指定路徑的字段或元素(對(duì)于 JSON 數(shù)組,負(fù)整數(shù)從末尾開始計(jì)數(shù))
@? JSON 路徑是否返回指定 JSON 值的任何項(xiàng)目?
@@ 返回指定 JSON 值的 JSON 路徑謂詞檢查結(jié)果。僅考慮結(jié)果的第一項(xiàng)。如果結(jié)果不是布爾值,則返回 null。

JSONB 相關(guān)的索引

我們主要討論 GIN;BTREE 與 HASH

GIN 索引

支持兩種操作類型

  • jsonb_ops (default) [索引 JSONB 中的每個(gè)鍵與值]

    ?, ?|, ?&, @>, @@, @?

  • jsonb_pathops [只是索引 JSONB 中 的值]]

    @>, @@, @?

實(shí)例

準(zhǔn)備數(shù)據(jù)

drop table if exists  test cascade;
CREATE TABLE test(id bigserial, data JSONB, PRIMARY KEY (id));
CREATE INDEX idx_test_data ON test USING gin (data);

insert into test(data) values('{"name":"lxm", "age":10, "nick_name":["xiaoming","baobao"], "phone_list":["1111","2222"]}'::jsonb);

查詢 頂層 關(guān)鍵詞是否存在(可以使用到 gin 索引)

set enable_seqscan = off;
select * from test where data ? 'id';  -- 查詢一個(gè)關(guān)鍵詞
explain (verbose, analyse, costs, buffers) select * from test where data ? 'id';  

select * from test where data ?| array['id','name']; --查詢多個(gè)關(guān)鍵詞
explain (verbose, analyse, costs, buffers) select * from test where data ?| array['id','name']; --查詢多個(gè)關(guān)鍵詞


lxm=# set enable_seqscan = off;
SET
lxm=# select * from test where data ? 'id';  -- 查詢一個(gè)關(guān)鍵詞
 id | data
----+------
(0 rows)

lxm=# explain (verbose, analyse, costs, buffers) select * from test where data ? 'id';
                                                       QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on public.test  (cost=12.09..22.78 rows=12 width=40) (actual time=0.004..0.004 rows=0 loops=1)
   Output: id, data
   Recheck Cond: (test.data ? 'id'::text)
   Buffers: shared hit=3
   ->  Bitmap Index Scan on idx_test_data  (cost=0.00..12.09 rows=12 width=0) (actual time=0.003..0.003 rows=0 loops=1)
         Index Cond: (test.data ? 'id'::text)
         Buffers: shared hit=3
 Planning:
   Buffers: shared hit=1
 Planning Time: 0.020 ms
 Execution Time: 0.014 ms
(11 rows)

lxm=#
lxm=# select * from test where data ?| array['id','name']; --查詢多個(gè)關(guān)鍵詞
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=# explain (verbose, analyse, costs, buffers) select * from test where data ?| array['id','name']; --查詢多個(gè)關(guān)鍵詞
                                                       QUERY PLAN
------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on public.test  (cost=16.09..26.78 rows=12 width=40) (actual time=0.017..0.018 rows=1 loops=1)
   Output: id, data
   Recheck Cond: (test.data ?| '{id,name}'::text[])
   Heap Blocks: exact=1
   Buffers: shared hit=5
   ->  Bitmap Index Scan on idx_test_data  (cost=0.00..16.09 rows=12 width=0) (actual time=0.010..0.011 rows=1 loops=1)
         Index Cond: (test.data ?| '{id,name}'::text[])
         Buffers: shared hit=4
 Planning:
   Buffers: shared hit=1
 Planning Time: 0.082 ms
 Execution Time: 0.034 ms
(12 rows)

查詢 非頂層 關(guān)鍵詞是否存在(無(wú)法使用到 gin 索引)

set enable_seqscan = off;
select * from test where data->'name' ? 'lxm';  
explain (verbose, analyse, costs, buffers) select * from test where data->'name' ? 'lxm';  

lxm=# set enable_seqscan = off;
SET
lxm=# select * from test where data->'name' ? 'lxm';  
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=# explain (verbose, analyse, costs, buffers) select * from test where data->'name' ? 'lxm';  
                                                        QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------
 Seq Scan on public.test  (cost=10000000000.00..10000000028.00 rows=12 width=40) (actual time=0.021..0.023 rows=1 loops=1)
   Output: id, data
   Filter: ((test.data -> 'name'::text) ? 'lxm'::text)
   Buffers: shared hit=1
 Planning Time: 0.097 ms
 Execution Time: 0.043 ms
(6 rows)

可以看到無(wú)法使用到索引, 那如何解決, 可以使用下面 方法

非頂層關(guān)鍵詞 使用索引的 方法

-- 千萬(wàn)注意 gin 后面有兩個(gè)括號(hào),用單個(gè)括號(hào)會(huì)語(yǔ)法報(bào)錯(cuò)
drop index if exists idx_test_data_nick_name;
create index idx_test_data_nick_name on test using gin((data->'nick_name'));  
set enable_seqscan = off;
select * from test where data->'nick_name' ? 'xiaoming';  
explain (verbose, analyse, costs, buffers) select * from test where data->'nick_name' ? 'xiaoming';  

lxm=# drop index if exists idx_test_data_nick_name;
DROP INDEX
lxm=# create index idx_test_data_nick_name on test using gin((data->'nick_name'));
CREATE INDEX
lxm=# set enable_seqscan = off;
SET
lxm=# select * from test where data->'nick_name' ? 'xiaoming';
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=# explain (verbose, analyse, costs, buffers) select * from test where data->'nick_name' ? 'xiaoming';
                                                        QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on public.test  (cost=8.00..12.02 rows=1 width=40) (actual time=0.018..0.019 rows=1 loops=1)
   Output: id, data
   Recheck Cond: ((test.data -> 'nick_name'::text) ? 'xiaoming'::text)
   Heap Blocks: exact=1
   Buffers: shared hit=3
   ->  Bitmap Index Scan on idx_test_data_name  (cost=0.00..8.00 rows=1 width=0) (actual time=0.009..0.010 rows=1 loops=1)
         Index Cond: ((test.data -> 'nick_name'::text) ? 'xiaoming'::text)
         Buffers: shared hit=2
 Planning:
   Buffers: shared hit=1
 Planning Time: 0.080 ms
 Execution Time: 0.040 ms
(12 rows)

@> 的使用:表示是否包含子json對(duì)象

lxm=# select * from test;
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=# select * from test where data @> '{"age":10}';
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=#
lxm=# select * from test where data @> '{"age":11}';
 id | data
----+------
(0 rows)

lxm=# select * from test where data @> '{"age":10, "nick_name":["xiaoming"]}';
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=#
lxm=# select * from test where data @> '{"age":10, "nick_name":["xiaomi"]}';
 id | data
----+------
(0 rows)

path_ops 支持

GIN 還支持“pathops”選項(xiàng)來(lái)減小 GIN 索引的大小。使用 pathops 選項(xiàng)時(shí), 只支持 @> 這一個(gè)運(yùn)算符

文檔中:

jsonb_ops : 數(shù)據(jù)中的每個(gè)鍵和值創(chuàng)建獨(dú)立的索引項(xiàng)

jsonb_path_ops :只給數(shù)據(jù)中的每值創(chuàng)建獨(dú)立的索引項(xiàng)

BTREE 索引

B 樹索引是關(guān)系數(shù)據(jù)庫(kù)中最常見的索引類型。但是,如果使用 B 樹索引索引整個(gè) JSONB 列,則唯一有用的運(yùn)算符是“=”、<、<=、>、>=。從本質(zhì)上講,這只能用于整個(gè)對(duì)象比較,其用例非常有限。

普通查詢

  • 代碼

    set enable_seqscan = 0;
    select * from test where (data->>'age')::int>1;
    
    explain (verbose, analyse, costs, buffers) select * from test where (data->>'age')::int>1;
    
  • 演示

lxm=#
lxm=# set enable_seqscan = 0;
SET
lxm=# select * from test where (data->>'age')::int>1;
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=#
lxm=# explain (verbose, analyse, costs, buffers) select * from test where (data->>'age')::int>1;
                                                        QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
 Seq Scan on public.test  (cost=10000000000.00..10000000001.02 rows=1 width=40) (actual time=0.013..0.014 rows=1 loops=1)
   Output: id, data
   Filter: (((test.data ->> 'age'::text))::integer > 1)
   Buffers: shared hit=1
 Planning Time: 0.071 ms
 Execution Time: 0.028 ms
(6 rows)

函數(shù)索引

  • 代碼
 -- 注意這里最外層有兩個(gè)括號(hào), 否則會(huì)報(bào)錯(cuò)
create index idx_test_data_age on test using btree(((data->>'age')::int)); 
set enable_seqscan = 0;
select * from test where (data->>'age')::int>1;
explain (verbose, analyse, costs, buffers) select * from test where (data->>'age')::int>1;

  • 演示
lxm=# create index idx_test_data_age on test using btree(((data->>'age')::int));
CREATE INDEX
lxm=# set enable_seqscan = 0;
SET
lxm=# select * from test where (data->>'age')::int>1;
 id |                                              data
----+-------------------------------------------------------------------------------------------------
  1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
(1 row)

lxm=# explain (verbose, analyse, costs, buffers) select * from test where (data->>'age')::int>1;
                                                           QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
 Index Scan using idx_test_data_age on public.test  (cost=0.12..8.14 rows=1 width=40) (actual time=0.017..0.019 rows=1 loops=1)
   Output: id, data
   Index Cond: (((test.data ->> 'age'::text))::integer > 1)
   Buffers: shared hit=2
 Planning Time: 0.145 ms
 Execution Time: 0.044 ms
(6 rows)

HASH 索引

哈希索引適用于等值查詢

drop index if exists  idx_test_age;
-- 注意下面有三個(gè)括號(hào), 否則會(huì)報(bào)語(yǔ)法錯(cuò)誤
create index idx_test_age on test using hash(((data->>'age')::int));
set enable_seqscan=0;
select * from test where (((data->>'age')::int))=10;
explain (verbose, analyse, costs, buffers) select * from test where (((data->>'age')::int))=10;

  • 演示

    lxm=# drop index if exists  idx_test_age;
    DROP INDEX
    lxm=# create index idx_test_age on test using hash(((data->>'age')::int));
    explain (verbose, analyse, costs, buffers) select * from test where (((data->>'age')::int))=10;
    
    CREATE INDEX
    lxm=# set enable_seqscan=0;
    SET
    lxm=# select * from test where (((data->>'age')::int))=10;
     id |                                              data                                               
    ----+-------------------------------------------------------------------------------------------------
      1 | {"age": 10, "name": "lxm", "nick_name": ["xiaoming", "baobao"], "phone_list": ["1111", "2222"]}
    (1 row)
    
    lxm=# explain (verbose, analyse, costs, buffers) select * from test where (((data->>'age')::int))=10;
                                                            QUERY PLAN                                                         
    ---------------------------------------------------------------------------------------------------------------------------
     Index Scan using idx_test_age on public.test  (cost=0.00..8.02 rows=1 width=40) (actual time=0.010..0.011 rows=1 loops=1)
       Output: id, data
       Index Cond: (((test.data ->> 'age'::text))::integer = 10)
       Buffers: shared hit=2
     Query Identifier: 1710720936157136870
     Planning Time: 0.047 ms
     Execution Time: 0.021 ms
    (7 rows)
    
    

參考:
https://scalegrid.io/blog/using-jsonb-in-postgresql-how-to-effectively-store-index-json-data-in-postgresql/
https://www.jianshu.com/p/96f78afb5a34文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-512947.html

到了這里,關(guān)于PostgreSQL JSON 類型詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • javaScript——json字符串詳解

    本篇文章將講解,什么是 json字符串 , json字符串 與字符串?dāng)?shù)組的相互轉(zhuǎn)換, json字符串 與字符串?dāng)?shù)組的區(qū)別 JSON 字符串(JSON String)是一種特定格式的文本字符串,用于表示數(shù)據(jù)。JSON 是 JavaScript Object Notation 的縮寫,它是一種輕量級(jí)的數(shù)據(jù)交換格式,通常用于將數(shù)據(jù)從一個(gè)

    2024年02月08日
    瀏覽(22)
  • 泛型中K TVE? Object等分別代表什么含義。

    E一Element(在集合中使用,因?yàn)榧现写娣诺氖窃? T- Type (Java類) K - Key(鍵) ?V- Value (值) N- Number(數(shù)值類型) ?-表示不確定的java類型(無(wú)限制通配符類型) S、U、V- 2nd、3rd、4th types Object-是所有類的根類,任何類的對(duì)象都可以設(shè)置給該Object引用變量,使用的時(shí)候可能需要類型強(qiáng)制轉(zhuǎn)

    2024年02月12日
    瀏覽(19)
  • MySQL中JSON數(shù)據(jù)類型詳解

    MySQL中JSON數(shù)據(jù)類型詳解

    目錄 概要及優(yōu)點(diǎn) JSON定義 JSON字段的增刪改查操作 插入操作 查詢操作 修改操作 刪除操作 如何對(duì)JSON字段創(chuàng)建索引? ?加索引查詢結(jié)果分析: ?不加索引查詢結(jié)果分析: 使用JSON時(shí)的注意事項(xiàng) ? ? ? ? JSON數(shù)據(jù)類型是MySQL5.7.8開始支持的。在此之前,只能通過(guò)字符類型(CHAR、V

    2024年02月06日
    瀏覽(17)
  • MySQL的Json類型個(gè)人用法詳解

    MySQL的Json類型個(gè)人用法詳解

    前言 雖然MySQL很早就添加了Json類型,但是在業(yè)務(wù)開發(fā)過(guò)程中還是很少設(shè)計(jì)帶這種類型的表。少不代表沒(méi)有,當(dāng)真正要對(duì)Json類型進(jìn)行特定查詢,修改,插入和優(yōu)化等操作時(shí),卻感覺(jué)一下子想不起那些函數(shù)怎么使用。比如把json里的某個(gè)鍵和值作為SQL條件,修改某個(gè)鍵下的子鍵的

    2024年02月10日
    瀏覽(35)
  • 【MySQL】MySQL 8 的 JSON 新特性詳解(1)JSON 數(shù)據(jù)類型

    【MySQL】MySQL 8 的 JSON 新特性詳解(1)JSON 數(shù)據(jù)類型

    你好,我是小雨青年,一名使用MySQL 8 的程序員。 MySQL 8 引入了對(duì) JSON 數(shù)據(jù)類型的全面支持,并提供了一組內(nèi)置函數(shù)以有效處理 JSON 數(shù)據(jù)。MySQL 8 中的 JSON 支持的一些關(guān)鍵特性如下: JSON 數(shù)據(jù)類型:MySQL 8 擁有一個(gè)名為 JSON 的新數(shù)據(jù)類型,可用于在列中存儲(chǔ) JSON 數(shù)據(jù)。該數(shù)據(jù)類

    2024年02月02日
    瀏覽(20)
  • 【華為OD統(tǒng)一考試B卷 | 200分】代表團(tuán)坐車( C++ Java JavaScript python )

    在線OJ 已購(gòu)買本專欄用戶,請(qǐng)私信博主開通賬號(hào),在線刷題?。?! 運(yùn)行出現(xiàn) Runtime Error 0Aborted,請(qǐng)忽略 華為OD統(tǒng)一考試A卷+B卷 新題庫(kù)說(shuō)明 2023年5月份,華為官方已經(jīng)將的 2022/0223Q(1/2/3/4)統(tǒng)一修改為OD統(tǒng)一考試(A卷)和OD統(tǒng)一考試(B卷)。 你收到的鏈接上面會(huì)標(biāo)注A卷還是B卷。

    2024年02月09日
    瀏覽(22)
  • 【C++】C++ 引用詳解 ① ( 變量的本質(zhì) - 引入 “ 引用 “ 概念 | 引用語(yǔ)法簡(jiǎn)介 | 引用做函數(shù)參數(shù) | 復(fù)雜類型引用做函數(shù)參數(shù) )

    【C++】C++ 引用詳解 ① ( 變量的本質(zhì) - 引入 “ 引用 “ 概念 | 引用語(yǔ)法簡(jiǎn)介 | 引用做函數(shù)參數(shù) | 復(fù)雜類型引用做函數(shù)參數(shù) )

    \\\" 引用 \\\" 語(yǔ)法 是 C++ 語(yǔ)言中 特有的 , 在 C 語(yǔ)言中是沒(méi)有 引用 這個(gè)概念的 ; 分析 引用 之前 , 先回顧下 變量 : 在 【C 語(yǔ)言】變量本質(zhì) ( 變量概念 | 變量本質(zhì) - 內(nèi)存空間別名 | 變量存儲(chǔ)位置 - 代碼區(qū) | 變量三要素 ) 博客中 , 介紹了變量的本質(zhì) : 變量 的本質(zhì)是 內(nèi)存空間 的 \\\" 別名

    2024年02月11日
    瀏覽(37)
  • postgresql json數(shù)據(jù)操作

    pg支持json數(shù)據(jù)操作,2種類型json jsonb postgresql json jsonb 2種數(shù)據(jù)類型區(qū)別 中文解釋 PostgreSQL提供了兩種數(shù)據(jù)類型來(lái)存儲(chǔ)JSON數(shù)據(jù): JSON 和 JSONB 。下面是它們之間的區(qū)別: JSON: JSON 數(shù)據(jù)類型在PostgreSQL中將JSON數(shù)據(jù)按原樣存儲(chǔ),不進(jìn)行額外的處理。它會(huì)驗(yàn)證JSON語(yǔ)法,但不強(qiáng)制執(zhí)行任

    2024年02月15日
    瀏覽(17)
  • 解決 JavaScript 輸出為 [object Object] 的問(wèn)題

    ??作者簡(jiǎn)介:練習(xí)時(shí)長(zhǎng)兩年半的Java up主 ??個(gè)人主頁(yè):程序員老茶 ?? ps:點(diǎn)贊??是免費(fèi)的,卻可以讓寫博客的作者開興好久好久?? ??系列專欄:Java全棧,計(jì)算機(jī)系列(火速更新中) ?? 格言:種一棵樹最好的時(shí)間是十年前,其次是現(xiàn)在 ??動(dòng)動(dòng)小手,點(diǎn)個(gè)關(guān)注不迷路,感

    2024年02月04日
    瀏覽(29)
  • JSON轉(zhuǎn)換List<Map<String, Object>>、Map<String, Object>

    廢話就不說(shuō)了 早上10點(diǎn)研究到現(xiàn)在 獲取redis的JSON字符串 String getPalletListNew = redisService.getRedis(“getPalletListNew”, abroad + “” + goodsLevel + “” + startPort + “” + destinationPort + “” + maxTon + “” + minTon); 轉(zhuǎn)換MapString,Object public MapString, Object jsonToMap(String json){ MapString, Object map = new

    2024年02月20日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包