簡體   English   中英

mysql 更新 json 字段被引用

[英]mysql update json field getting quoted

我將以下 json 結構存儲到 mysql

{
    "somefield": "0",
    "date": "2020-12-01",
    "caption": null,
    "field": [
        {
            "id_type1": "5192"
        },
        {
            "id_type2": "3285"
        },
        {
            "id_type2": "3638"
        },
        {
            "id_type2": "3750"
        },
        {
            "id_type2": "3760"
        },
        {
            "id_type1": "3161"
        },
        {
            "id_type1": "1044"
        }
    ],
    "question": "",
    "people": [],
    "title": ""
}

當我提交一個表單時,我想按名稱檢索非空值,然后更新 json 字段

假設我提交了 2 個字段, datefield字段

[{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}]

日期

'2021-04-02'

我想用這些值更新 json 字段

UPDATE table
SET
json_champ = JSON_SET(json_champ, '$."field"', '[{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}]', '$."date"', '2020-12-01')
WHERE id = '52907';

日期一切正常,但字段被轉義

"field": "[{\"id_type1\":5192},{\"id_type2\":3285},{\"id_type2\":3638},{\"id_type2\":3750},{\"id_type2\":3760},{\"id_type1\":3161},{\"id_type1\":1044},{\"id_type1\":8081}]"

預期的

"field": [{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}]

如果我將預期的 output 直接粘貼到 PMA 中,它會按預期工作

粘貼

{
    "somefield": "0",
    "date": "2020-12-01",
    "caption": null,
    "field": [{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}],
    "question": "",
    "people": [],
    "title": ""
}

生成的 sql 查詢

<?php
$sqlUpdate = " UPDATE table 
SET 
json_champ = JSON_SET(json_champ, '$."field"', '".json_encode($fieldValues, , JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT)."', '$."date"', '2020-12-01')
WHERE id = '".$id."'";

據我所知,唯一的區別是在 json 的開頭添加字段,然后將字符串插入表中?

$json_string = '[{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044}]';
   
$ammended_string = json_encode(['field' => json_decode($json_string)]);

$sqlUpdate = " UPDATE table 
SET 
json_champ = '".$ammended_string ."'
WHERE id = '".$id."'";

如果我錯了,請糾正我,但認為你可能有點過於復雜了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM