㈠ 怎麼在mysql中放入json數據
我們知道,JSON是一種輕量級的數據交互的格式,大部分NO SQL資料庫的存儲都用JSON。MySQL從5.7開始支持JSON格式的數據存儲,並且新增了很多JSON相關函數。MySQL 8.0 又帶來了一個新的把JSON轉換為TABLE的函數JSON_TABLE,實現了JSON到表的轉換。
舉例一
我們看下簡單的例子:
簡單定義一個兩級JSON 對象
mysql> set @ytt='{"name":[{"a":"ytt","b":"action"}, {"a":"dble","b":"shard"},{"a":"mysql","b":"oracle"}]}';Query OK, 0 rows affected (0.00 sec)
第一級:
mysql> select json_keys(@ytt);+-----------------+| json_keys(@ytt) |+-----------------+| ["name"] |+-----------------+1 row in set (0.00 sec)
第二級:
mysql> select json_keys(@ytt,'$.name[0]');+-----------------------------+| json_keys(@ytt,'$.name[0]') |+-----------------------------+| ["a", "b"] |+-----------------------------+1 row in set (0.00 sec)
我們使用MySQL 8.0 的JSON_TABLE 來轉換 @ytt。
mysql> select * from json_table(@ytt,'$.name[*]' columns (f1 varchar(10) path '$.a', f2 varchar(10) path '$.b')) as tt;
+-------+--------+
| f1 | f2 |
+-------+--------+
| ytt | action |
| dble | shard |
| mysql | oracle |
+-------+--------+
3 rows in set (0.00 sec)
舉例二
再來一個復雜點的例子,用的是EXPLAIN 的JSON結果集。
JSON 串 @json_str1。
set @json_str1 = ' { "query_block": { "select_id": 1, "cost_info": { "query_cost": "1.00" }, "table": { "table_name": "bigtable", "access_type": "const", "possible_keys": [ "id" ], "key": "id", "used_key_parts": [ "id" ], "key_length": "8", "ref": [ "const" ], "rows_examined_per_scan": 1, "rows_proced_per_join": 1, "filtered": "100.00", "cost_info": { "read_cost": "0.00", "eval_cost": "0.20", "prefix_cost": "0.00", "data_read_per_join": "176" }, "used_columns": [ "id", "log_time", "str1", "str2" ] } }}';
第一級:
mysql> select json_keys(@json_str1) as 'first_object';+-----------------+| first_object |+-----------------+| ["query_block"] |+-----------------+1 row in set (0.00 sec)
第二級:
mysql> select json_keys(@json_str1,'$.query_block') as 'second_object';+-------------------------------------+| second_object |+-------------------------------------+| ["table", "cost_info", "select_id"] |+-------------------------------------+1 row in set (0.00 sec)
第三級:
mysql> select json_keys(@json_str1,'$.query_block.table') as 'third_object'G*************************** 1. row ***************************third_object: ["key","ref","filtered","cost_info","key_length","table_name","access_type","used_columns","possible_keys","used_key_parts","rows_examined_per_scan","rows_proced_per_join"]1 row in set (0.01 sec)
第四級:
mysql> select json_extract(@json_str1,'$.query_block.table.cost_info') as 'forth_object'G*************************** 1. row ***************************forth_object: {"eval_cost":"0.20","read_cost":"0.00","prefix_cost":"0.00","data_read_per_join":"176"}1 row in set (0.00 sec)
那我們把這個JSON 串轉換為表。
SELECT * FROM JSON_TABLE(@json_str1,
"$.query_block"
COLUMNS(
rowid FOR ORDINALITY,
NESTED PATH '$.table'
COLUMNS (
a1_1 varchar(100) PATH '$.key',
a1_2 varchar(100) PATH '$.ref[0]',
a1_3 varchar(100) PATH '$.filtered',
nested path '$.cost_info'
columns (
a2_1 varchar(100) PATH '$.eval_cost' ,
a2_2 varchar(100) PATH '$.read_cost',
a2_3 varchar(100) PATH '$.prefix_cost',
a2_4 varchar(100) PATH '$.data_read_per_join'
),
a3 varchar(100) PATH '$.key_length',
a4 varchar(100) PATH '$.table_name',
a5 varchar(100) PATH '$.access_type',
a6 varchar(100) PATH '$.used_key_parts[0]',
a7 varchar(100) PATH '$.rows_examined_per_scan',
a8 varchar(100) PATH '$.rows_proced_per_join',
a9 varchar(100) PATH '$.key'
),
NESTED PATH '$.cost_info'
columns (
b1_1 varchar(100) path '$.query_cost'
),
c INT path "$.select_id"
)
) AS tt;
+-------+------+-------+--------+------+------+------+------+------+----------+-------+------+------+------+------+------+------+
| rowid | a1_1 | a1_2 | a1_3 | a2_1 | a2_2 | a2_3 | a2_4 | a3 | a4 | a5 | a6 | a7 | a8 | a9 | b1_1 | c |
+-------+------+-------+--------+------+------+------+------+------+----------+-------+------+------+------+------+------+------+
| 1 | id | const | 100.00 | 0.20 | 0.00 | 0.00 | 176 | 8 | bigtable | const | id | 1 | 1 | id | NULL | 1 |
| 1 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1.00 | 1 |
+-------+------+-------+--------+------+------+------+------+------+----------+-------+------+------+------+------+------+------+
2 rows in set (0.00 sec)
當然,JSON_table 函數還有其他的用法,我這里不一一列舉了,詳細的參考手冊。
㈡ 如何向json數組中插入json對象
json 數組也是數組
//1、
var jsonstr="[{'name':'a','value':1},{'name':'b','value':2}]";
var jsonarray = eval('('+jsonstr+')');
var arr =
{
"name" : $('#names').val(),
"value" : $('#values').val()
}
jsonarray.push(arr);
//2、
var json={};// 定義一個json對象
json.array1=["2","4"];// 增加一個新屬性,此屬性是數組
json.array1[json.array1.length]='6';// 數組追加一個元素
alert(json.array1)
㈢ 怎麼想向json數組中添加json數據
JSON(JavaScript
Object
Notation
)是一種輕量級的數據交換格式,採用完全獨立於語言的文本格式,JSON是JavaScript原生數據格式。
下面給大家介紹js數組添加json數據的兩種方式。
//
第一種方式
personInfo
:
[],
for(var
i
=
0;
i
<
_STAGE.passengerInfoArray.length;
i++){
var
name
=
_STAGE.passengerInfoArray[i];
var
person
=
{v:name,
text:name};
this.personInfo.push(person);
}
//
第二種方式
var
passengerInfo
=
{};
passengerInfo.psgTypeDesc
=
psgTypeDesc;
passengerInfo.flightPrice
=
flightPrice;
_STAGE.passengerInfoArray.push(passengerInfo);
js數組與
json
的區別
一,數組
1.
定義一維數組:var
s1=new
Array();
s1=[1,2,3,4]或者s1[0]=1,s1[1]=2,s1[3]=3,s1[4]=4;
alert(s1[0]);
結果為1;
2,,定義二維素組:var
s1=new
Array();
var
s1=[[3,1],[2,3,4],3,[4,5,6,7,8]];
alert(s1[1][0]);
結果為2;
二,定義json對象
1,json對象
var
status_process
=
{
"
name5"
:
'閑置期',
"name1"
:
'播種期',
"name2"
:
'苗期',
"name3"
:
'生長期',
"name4"
:
'採收期'
}
alert(status_process);
結果為:Object:Object;
2,json字元串
所謂json字元串,是指該字元串變數的值與json的格式相同,但是不是json對象,比如:
var
s1="{";
var
s2
=
"
'name5'
:
'閑置期',
'name1'
:
'播種期','name2'
:
'苗期','name3'
:
'生長期','name4'
:
'採收期'";
var
s3="}";
var
status_process=s1+s2
+s3;
雖然status_process的值符合json對象的格式,但是它不是對象,只是一個字元串(是拼湊出來的);
將字元串轉換為json對象使用函數eval,eval("("
+
status_process+
")");
結論:從後台傳入到前台的是json字元串,不是真正的json對象,因此需要使用eval函數轉換。
3,json對象的使用
var
status_process
=
{
name5
:
'閑置期',
name1
:
'播種期',
name2
:
'苗期',
name3
:
'生長期',
name4
:
'採收期'
};
alert(status_process["name5"]);
alert(status_process.name5);
兩個都為:閑置期
4,json二維對象
var
status_process
=
{
name5
:
{name3:'空閑閑置期'},
name1
:
'播種期',
name2
:
'苗期',
name3
:
'生長期',
name4
:
'採收期'
};
alert(status_process["name5"]["name3"]);
alert(status_process.name5.name3);
結果都為:'空閑閑置期'
㈣ js中如何向json數組添加元素
比如現在有一個json對象為jsonObj,需要給這個對象添加新的屬性newParam,同時給newParam賦值為pre。做法如下:
var jsonObj={
'param1':22,
'param2' :33
};
jsonObj. newParam ='pre';
新的屬性添加以後,json對象變成:
var jsonObj={
'param1':22,
'param2' :33,
'newParam':'pre'
};
(4)如何插入json數據擴展閱讀:
json數據格式:主要由對象 { } 和數組 [ ] 組成:
其中對象包括鍵值對(屬性:屬性值){key: value},value 可為 str,num,list,obj。取值使用 objcet.key。
{key: value, key2:value2,} 鍵:值用冒號分開,對間用,連接。
數組包含元素:num,str,list,objcet 都可以,利用索引訪問 [index],用 . 連接各個值。