首页 > 解决方案 > 如何使用php从json文件中删除节点

问题描述

我有下一个json:

[
    {
        "clave": "es",
        "content": {
            "barra": [
                "a",
                "a",
                "N",
                "C"
            ],
            "letras_inicio": "a",
            "titulos_servicios": [
                "A",
                "A",
                "A"
            ],
            "desc_servicios": [
                "O",
                "O",
                "E"
            ],
            "titulo_nosotros": "n",
            "descripcion_nosotros": "S",
            "titulos_especialidades": [
                "A",
                "A"
            ],
            "desc_especialidades": [
                "E",
                "L"
            ],
            "titulo_frm_contacto": "Co",
            "frmContacto": [
                "N",
                "c",
                "C",
                "A",
                "M",
                "E"
            ]
        }
    },
    {
        "clave": "por",
        "content": {
            "barra": [
                "f",
                "f",
                "f",
                "f"
            ],
            "letras_inicio": "f",
            "titulos_servicios": [
                "f",
                "f",
                "f"
            ],
            "desc_servicios": [
                "qf",
                "qf",
                "qf"
            ],
            "titulo_nosotros": "f",
            "descripcion_nosotros": "qf",
            "titulos_especialidades": [
                "f",
                "f"
            ],
            "desc_especialidades": [
                "qf",
                "qf"
            ],
            "titulo_frm_contacto": "f",
            "frmContacto": [
                "f",
                "f",
                "f",
                "f",
                "f",
                "f"
            ]
        }
    }
]

下一个代码是我用来从 json 文件中删除一个节点:

$json = file_get_contents('php://input');
$obj = json_decode($json);
$index = filter_var($obj->index);
$data = file_get_contents('languajes.json');
$data = json_decode($data,true);
unset($data[$index]);
if($data = json_encode($data,JSON_PRETTY_PRINT)){
    echo 'success';
}else{
    echo 'failed';
}
file_put_contents('languajes.json', $data);

因此,当我保存 json 时,它看起来像:

{
    "0": {
        "clave": "es",
        "content": {
            "barra": [
                "I",
                "S",
                "N",
                "C"
            ],
            "letras_inicio": "N",
            "titulos_servicios": [
                "A",
                "A",
                "A"
            ],
            "desc_servicios": [
                "O",
                "O",
                "E"
            ],
            "titulo_nosotros": "N",
            "descripcion_nosotros": "S",
            "titulos_especialidades": [
                "A",
                "A"
            ],
            "desc_especialidades": [
                "E",
                "L"
            ],
            "titulo_frm_contacto": "C",
            "frmContacto": [
                "N",
                "A",
                "C",
                "A",
                "M",
                "E"
            ]
        }
    },
    "2": {
        "clave": "en",
        "content": {
            "barra": [
                "H",
                "S",
                "A",
                "C"
            ],
            "letras_inicio": "W",
            "titulos_servicios": [
                "W",
                "M",
                "D"
            ],
            "desc_servicios": [
                "W",
                "W",
                "W"
            ],
            "titulo_nosotros": "A",
            "descripcion_nosotros": "W",
            "titulos_especialidades": [
                "W",
                "m"
            ],
            "desc_especialidades": [
                "f",
                "a"
            ],
            "titulo_frm_contacto": "C",
            "frmContacto": [
                "F",
                "L",
                "E",
                "S",
                "M",
                "S"
            ]
        }
    }
}

问题是当你将数据保存在json文件中后尝试读取数据时,php放入的数字导致我无法读取文件。我怎样才能避免这种情况发生?

我将不胜感激您的回答

标签: javascriptphparraysjson

解决方案


unset()只是从数组中删除一个索引,它不会调整所有其他元素的索引。当数组的索引不是从 开始的连续数字时0json_encode()将其编码为对象,而不是数组。

取消设置后,您可以重置所有索引

$data = array_values($data);

或者您可以使用array_splice()删除元素:

array_splice($data, $index, 1);

推荐阅读