我在mysql单元格中获得了以下json代码:
{
"0ba9f1d1-787c-4d8e-a820-0c973bbd20fb": {
"0": {
"value": "Alex"
}
},
"9a7df867-1c25-4e15-b0dd-1d20031c31fb": {
"0": {
"value": "Άλέξανδρος Γιόου"
}
},
"659d5d3d-ac12-4f17-91c0-334fbd4f3538": {
"option": {
"0": "0",
"1": "0"
},
"select": "1"
}
}
我想更新php中的一些值。 我尝试使用以下代码,但我发现了一些意想不到的结果。
$check = mysql_query("SELECT `elements` FROM `test_zoo_item` WHERE `id` = 34839");
$decodedelements = json_decode($elements, true);
$decodedelements['0ba9f1d1-787c-4d8e-a820-0c973bbd20fb'][0]['value'] = "Test";
$decodedelements['9a7df867-1c25-4e15-b0dd-1d20031c31fb'][0]['value'] = "Γιώργος";
$decodedelements['659d5d3d-ac12-4f17-91c0-334fbd4f3538']['option'][0] = "3";
$newelements = json_encode($decodedelements);
mysql_query("UPDATE `test_zoo_item` SET `elements`='$newelements' WHERE `id`=34839");
我更新的单元格是:
{
"0ba9f1d1-787c-4d8e-a820-0c973bbd20fb": [{
"value": "Alex"
}],
"9a7df867-1c25-4e15-b0dd-1d20031c31fb": [{
"value": "u00ce...fu0082"
}],
"659d5d3d-ac12-4f17-91c0-334fbd4f3538": {
"option": ["0", "0"],
"select": "1"
}
}
是否有可能帮助我解决以下问题?
"0": {"value": "Alex"}
已更改为[{"value": "Alex"}]
"value": "Άλέξανδρος Γιόου"
已更改为"value": "u00c....cfu0082"
"option": {"0": "0","1": "0"}
已更改为"option": ["0", "0"]
答案 0 :(得分:1)
可以使用JSON_FORCE_OBJECT
选项停用阵列转换(您的第一个和最后一个示例)。第二个例子看起来像unicode用于编码。可以使用JSON_UNESCAPED_UNICODE
$newelements = json_encode( $decodedelements, JSON_FORCE_OBJECT | JSON_UNESCAPED_UNICODE );
答案 1 :(得分:1)
"0": {"value": "Alex"}
已更改为[{"value": "Alex"}]
"option": {"0": "0","1": "0"}
已更改为"option": ["0", "0"]
这是因为PHP中连续数字索引的数组相当于JSON中的[]
数组,json_encode
对此进行编码。如果您想强制对象,那么JSON_FORCE_OBJECT
。
"value": "Άλέξανδρος Γιόου"
已更改为"value": "u00c....cfu0082"
那是因为json_encode
将非ASCII字符编码为\u....
转义序列,这本身就很好。然后,你不是 SQL转义字符串,所以MySQL过滤掉反斜杠。您需要SQL转义值或使用预准备语句。