4

我希望任何人都可以帮助我。我的 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 的元素之前有一个键。我知道这种行为是由unsetPHP json_encode as object after PHP array unset())引起的。

有没有办法防止这种行为?

4

6 回答 6

2

在我找到这个解决方案之前有同样的问题:

除了 array_values 技术之外,还可以使用 array_splice 并在一个步骤中删除元素并重新索引:

unset($a[1]);

反而:

array_splice($a, 1, 1);

从这里引用:https ://stackoverflow.com/a/3869219/4809658

于 2015-09-14T09:02:05.783 回答
1

最好的方法是,

$json_arr = array_values($json_arr);
于 2014-08-23T09:40:07.917 回答
1

尽管您已经在客户端解决了您的问题,但我认为使用 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;
于 2015-06-17T13:27:00.067 回答
0

用这个 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);
?>

最好可以用 JS 解析 JSON,以便访问所需的汽车。无需使用 PHP 修改 JSON。

于 2013-08-14T14:33:41.100 回答
0

我搜索并尝试实现我在问题中搜索的行为,但我什么也没找到。我认为,就像您在这个答案中看到的那样,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");
        }
    });
}
于 2013-08-20T09:43:17.427 回答
0

为什么需要防止这种行为?当您将 json 转换为 PHP 数组时,无论 JSON 格式如何,都将成为索引数组(具有您显示的数字)。

如果编号不正确,请使用http://php.net/manual/en/function.array-values.php进行修复。

于 2013-08-14T14:29:43.097 回答