亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用javascript從oracle獲取數據到嵌套的json對象?

如何使用javascript從oracle獲取數據到嵌套的json對象?

米脂 2023-07-14 09:44:34
我當前的json格式是這樣的:{  {    'id' : 61,    'item' : 'apple pie,banana split',    'quantity' : '2,1',    'price' : '100000,50000'   },  {    'id' : 62,    'item' : 'beef steak,salad',    'quantity' : '1,2',    'price' : '50000,100000'  }}我想要的是這樣的:{  {    'id' : 61,    'item' :             {              '1': {'name': 'apple pie', 'quantity' : '2','price': '100000'},              '2': {'name': 'banana split', 'quantity' : '1','price': '50000'}        }  },  {    'id' : 62,    'item' :             {              '1': {'name': 'beef steak', 'quantity' : '1','price': '50000'},              '2': {'name': 'salad', 'quantity' : '2','price': '100000'}        }  }}我的數據庫是這樣的:split_id  item                      quantity  price61        apple pie~|~banana split  2~|~1     100000~|~5000062        beef steak~|~salad        1~|~2     50000~|~100000我使用“~|~”,因為如果我使用“,”,那么它將被識別為查詢中的下一列值。我不會創建一個新行來避免商品、數量和價格的多個值,因為它代表不同的交易。我找到了這個問題的答案,但它是在 php 和 mysql 中。我找不到 javascript 和 oracle 的。我很感謝對這個問題的任何幫助。謝謝。
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

在 Oracle 中,您可以拆分逗號分隔的字符串,然后聚合為 JSON:


WITH bounds ( id, idx, item, i_start, i_end, quantity, q_start, q_end, price, p_start, p_end ) AS (

? SELECT split_id,

? ? ? ? ?1,

? ? ? ? ?item,

? ? ? ? ?1,

? ? ? ? ?INSTR( item, '~|~', 1 ),

? ? ? ? ?quantity,

? ? ? ? ?1,

? ? ? ? ?INSTR( quantity, '~|~', 1 ),

? ? ? ? ?price,

? ? ? ? ?1,

? ? ? ? ?INSTR( price, '~|~', 1 )

? FROM? ?table_name t

UNION ALL

? SELECT id,

? ? ? ? ?idx + 1,

? ? ? ? ?item,

? ? ? ? ?CASE i_end WHEN 0 THEN 0 ELSE i_end + 3 END,

? ? ? ? ?CASE i_end WHEN 0 THEN 0 ELSE INSTR( item, ',', i_end + 3 ) END,

? ? ? ? ?quantity,

? ? ? ? ?CASE p_end WHEN 0 THEN 0 ELSE q_end + 3 END,

? ? ? ? ?CASE p_end WHEN 0 THEN 0 ELSE INSTR( quantity, ',', q_end + 3 ) END,

? ? ? ? ?price,

? ? ? ? ?CASE q_end WHEN 0 THEN 0 ELSE p_end + 3 END,

? ? ? ? ?CASE q_end WHEN 0 THEN 0 ELSE INSTR( price, ',', p_end + 3 ) END

? FROM? ?bounds

? WHERE? i_end > 0

? OR? ? ?q_end > 0

? OR? ? ?p_end > 0

),

split_data ( items ) AS (

? SELECT JSON_OBJECT(

? ? ? ? ? ?KEY 'id' VALUE id,

? ? ? ? ? ?KEY 'items' VALUE

? ? ? ? ? ? ?JSON_OBJECTAGG(

? ? ? ? ? ? ? ?KEY? ?TO_CHAR( idx )

? ? ? ? ? ? ? ?VALUE JSON_OBJECT(

? ? ? ? ? ? ? ? ? ? ? ?KEY? ?'item'

? ? ? ? ? ? ? ? ? ? ? ?VALUE CASE

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WHEN i_start > 0 AND i_end = 0

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?THEN SUBSTR( item, i_start )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ELSE SUBSTR( item, i_start, i_end - i_start )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?END,

? ? ? ? ? ? ? ? ? ? ? ?KEY? ?'quantity'

? ? ? ? ? ? ? ? ? ? ? ?VALUE TO_NUMBER(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CASE

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WHEN q_start > 0 AND i_end = 0

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?THEN SUBSTR( quantity, q_start )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ELSE SUBSTR( quantity, q_start, q_end - q_start )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?END

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?),

? ? ? ? ? ? ? ? ? ? ? ?KEY? ?'price'

? ? ? ? ? ? ? ? ? ? ? ?VALUE TO_NUMBER(

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CASE

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WHEN p_start > 0 AND p_end = 0

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?THEN SUBSTR( price, p_start )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ELSE SUBSTR( price, p_start, p_end - p_start )

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?END

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?)

? ? ? ? ? ? ? ? ? ? )

? ? ? ? ? ? ? ? ? ? RETURNING CLOB

? ? ? ? ? ? ? )

? ? ? ? )

? FROM? ?bounds

? GROUP BY id

)

SELECT JSON_ARRAYAGG(

? ? ? ? ?items FORMAT JSON

? ? ? ? ?RETURNING CLOB

? ? ? ?) AS value

FROM? ?split_data;

其中,對于樣本數據:


CREATE TABLE table_name ( split_id, item, quantity, price ) AS

SELECT 61, 'apple pie~|~banana split', '2~|~1', '100000~|~50000' FROM DUAL UNION ALL

SELECT 62, 'beef steak~|~salad',? ? ? ?'1~|~2', '50000~|~100000' FROM DUAL;

輸出:


VALUE

----------------------------------------

[

? {

? ? "id" : 61,

? ? "items" :

? ? {

? ? ? "1" :

? ? ? {

? ? ? ? "item" : "apple pie",

? ? ? ? "quantity" : 2,

? ? ? ? "price" : 100000

? ? ? },

? ? ? "2" :

? ? ? {

? ? ? ? "item" : "banana split",

? ? ? ? "quantity" : 1,

? ? ? ? "price" : 50000

? ? ? }

? ? }

? },

? {

? ? "id" : 62,

? ? "items" :

? ? {

? ? ? "1" :

? ? ? {

? ? ? ? "item" : "beef steak",

? ? ? ? "quantity" : 1,

? ? ? ? "price" : 50000

? ? ? },

? ? ? "2" :

? ? ? {

? ? ? ? "item" : "salad",

? ? ? ? "quantity" : 2,

? ? ? ? "price" : 100000

? ? ? }

? ? }

? }

]

db<>


查看完整回答
反對 回復 2023-07-14
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

您當前的 JSON 對象格式錯誤。您可以將其設為數組,以使其更加簡單。你可以這樣做:


var data = [ { 'id' : 61, 'item' : 'apple pie,banana split', 'quantity' : '2,1', 'price' : '100000,50000', }, { 'id' : 62, 'item' : 'beef steak,salad', 'quantity' : '1,2', 'price' : '50000,100000', }];


var result = data.map(({id,...rest})=>({id, items:Array.from({length:2},(_,i)=>Object.fromEntries(Object.entries(rest).map(([k,v])=>[k,v.split(',')[i]])))}));


console.log(result);


這里我使用和map的組合來創建一個對象。您可以看到是硬編碼的,但您可以相應地更改它。fromEntriesentriesArray.fromlength:2


查看完整回答
反對 回復 2023-07-14
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號