我希望任何人都能帮助我。我的JSON没有索引(即任何元素上方都没有任何键)
[
{
"nome":"LABORGHINI GALLARDO",
"descrizione":"LAMBORGHINI GALLARDO ED. NERA- ANNO 2007- ",
"indirizzo_pubblicato":"autocaricateeea/LABORGHINI GALLARDO31072013-023853/LABORGHINI GALLARDO31072013-023853.json",
"indirizzo_immagine_copertina":"autocaricateeea/LABORGHINI GALLARDO31072013-023853/IMG_1414 (600x448).jpg",
"indirizzo_paginaauto":"autocaricateeea/LABORGHINI GALLARDO31072013-023853/index.html"
},
{
"nome":"RENAULT MEGANE",
"descrizione":"RENAULT MEGANE -ANNO 2006-DIESEL-CC. 1461",
"indirizzo_pubblicato":"autocaricateeea/RENAULT MEGANE31072013-024103/RENAULT MEGANE31072013-024103.json",
"indirizzo_immagine_copertina":"autocaricateeea/RENAULT MEGANE31072013-024103/P1080949 (600x450).jpg",
"indirizzo_paginaauto":"autocaricateeea/RENAULT MEGANE31072013-024103/index.html"
},
{
"nome":"FORD MONDEO",
"descrizione":"FORD MONDEO SINISTRATA- ANNO 2009- DIESEL- CC. 1997-",
"indirizzo_pubblicato":"autocaricateeea/FORD MONDEO31072013-045216/FORD MONDEO31072013-045216.json",
"indirizzo_immagine_copertina":"autocaricateeea/FORD MONDEO31072013-045216/P1080971 (600x450).jpg",
"indirizzo_paginaauto":"autocaricateeea/FORD MONDEO31072013-045216/index.html"
}
]
但是在运行unset()
以使用PHP删除元素之后,输出的JSON显示为:
{
"1": // <--- **** add a key before an element
{
"nome":"Fiat Punto ",
"descrizione":"Fiat Punto Bianca",
"indirizzo_pubblicato":"autocaricateeea/Fiat Punto 14072013-042703/Fiat Punto 14072013-042703.json",
"indirizzo_immagine_copertina":"autocaricateeea/Fiat Punto 14072013-042703/P1080713 (600x450).jpg",
"indirizzo_paginaauto":"autocaricateeea/Fiat Punto 14072013-042703/index.html"
},
...........
...........
...........
如何看到JSON元素之前有一个键。我知道这种行为是由unset
(PHP json_encode作为PHP数组unset()之后的对象)引起的。
有办法防止这种行为吗?
在我找到这个解决方案之前也有同样的问题:
除了array_values技术之外,还可以使用array_splice,在一个步骤中删除元素并重新索引:
unset($a[1]);
相反:
array_splice($a, 1, 1);
引用自此处:https://stackoverflow.com/a/3869219/4809658
最好的方法是
$json_arr = array_values($json_arr);
虽然你已经在客户端解决了你的问题,但我认为使用PHP展示我对这个问题的解决方案会很有帮助,其想法是构建一个新的数组并排除不需要的项,这样你就不会出现未设置导致的索引问题,比如:
$new_nodes= array();
for ($j = 0; $j < count($composition->nodes); $j++)
{
//exclude some nodes
if ($id!= $composition->nodes[$j]->id)
{
// store only the nodes that you want:
array_push($new_nodes, $composition->nodes[$j]);
}
}
// and finally, use the new modified nodes array:
$composition->nodes= $new_nodes;
为什么需要防止这种行为?当您将json转换为PHP数组时,无论json格式如何,都将成为索引数组(显示数字)。
如果编号不正确,请使用http://php.net/manual/en/function.array-values.php要修复。
使用此PHP脚本重新生成json
<?php
$arr = array
(array('nome' => 'LABORGHINI GALLARDO',
'descrizione' => 'LAMBORGHINI GALLARDO ED. NERA- ANNO 2007-',
'indirizzo_pubblicato' => 'autocaricateeea/LABORGHINI GALLARDO31072013-023853/LABORGHINI GALLARDO31072013-023853.json',
'indirizzo_immagine_copertina' => 'autocaricateeea/LABORGHINI GALLARDO31072013-023853/IMG_1414 (600x448).jpg',
'indirizzo_paginaauto' => 'autocaricateeea/LABORGHINI GALLARDO31072013-023853/index.html'),
array('nome' => 'RENAULT MEGANE',
'descrizione' => 'RENAULT MEGANE -ANNO 2006-DIESEL-CC. 1461',
'indirizzo_pubblicato' => 'autocaricateeea/RENAULT MEGANE31072013-024103/RENAULT MEGANE31072013-024103.json',
'indirizzo_immagine_copertina' => 'autocaricateeea/RENAULT MEGANE31072013-024103/P1080949 (600x450).jpg',
'indirizzo_paginaauto' => 'autocaricateeea/RENAULT MEGANE31072013-024103/index.html'),
array('nome' => 'FORD MONDEO',
'descrizione' => 'FORD MONDEO SINISTRATA- ANNO 2009- DIESEL- CC. 1997-',
'indirizzo_pubblicato' => 'autocaricateeea/FORD MONDEO31072013-045216/FORD MONDEO31072013-045216.json',
'indirizzo_immagine_copertina' => 'autocaricateeea/FORD MONDEO31072013-045216/P1080971 (600x450).jpg',
'indirizzo_paginaauto' => 'autocaricateeea/FORD MONDEO31072013-045216/index.html')
);
$arr_json = json_encode($arr);
var_dump($arr_json);
?>
优选地,JSON可以用JS进行解析,从而访问所需的汽车。不需要使用PHP修改JSON。
我搜索并尝试实现我在问题中搜索的行为,但一无所获。我认为,正如您在这个答案中看到的那样,unset函数会向数组添加索引,因为JSON_encode不支持带孔的数组。因此,为了解决我的问题,我用jQuery函数加载JSON文件,用jQuery删除元素,并调用ajax函数删除链接在JSON文件中包含的地址的文件:
$.getJSON('loadauto.json', function(result) {
var y = result;
$.each(result, function(i, field){
if(field.indirizzo_paginaauto == x){
delete result[i];
}
});
$.ajax({
async: true,
cache: false,
type: 'POST',
url: 'deleteauto.php',
data: { nuovofilejson: y, indirizzo: x},
success: function(data) {
alert ("Auto cancellata definitivamente");
},
error: function(data) {
alert ("Error");
}
});
}