-1

我有一个请求以以下格式将数据显示为 JSON 提要:

{
    "id": "123",
    "info": {
        "code": "ZGE",
        "description": "test1",
        "type": "AVL",
        "date": "09/08/2012"
    }
},
{
   "id": "456",
    "info": {
        "code": "ZDN",
        "description": "test2",
        "type": "CLR",
        "date": "16/02/2012"
    }
}

但是在我的 PHP 代码中,我认为我需要一个密钥迭代器 - 但我最终得到了这种格式:

{

"0": {
    "id": "123",
    "info": {
        "code": "ZGE",
        "description": "test1",
        "type": "AVL",
        "date": "09/08/2012"
    }
},
"1": {

    "id": "456",
    "info": {
        "code": "ZDN",
        "description": "test2",
        "type": "CLR",
        "date": "16/02/2012"
    }
}
}

关于如何在没有索引迭代器的情况下构建第一个数据集的任何想法?

4

4 回答 4

3

简单地创建一个对象数组,不需要键(注意列表周围的 [ ])

json.txt

[{
    "id": "123",
    "info": {
        "code": "ZGE",
        "description": "test1",
        "type": "AVL",
        "date": "09/08/2012"
    }
},
{
   "id": "456",
    "info": {
        "code": "ZDN",
        "description": "test2",
        "type": "CLR",
        "date": "16/02/2012"
    }
}]

例子.php

<?php
    $data = json_decode(file_get_contents('./json.txt'));
?>
于 2013-01-07T11:08:08.363 回答
1

您在第一个示例中指定的 JSON 格式(即请求的格式)不是有效的 JSON。

有效的 JSON 字符串必须计算为单个Javascript 对象;您给出的示例计算为两个 Javascript 对象,用逗号分隔。为了使其有效,您需要将整个内容括在方括号中,将其转换为 JS 数组或将其括在花括号中,并为这两个对象中的每一个指定一个键。

您编写的 PHP 代码正在执行这两个选项中的第二个。因此,它生成了有效的 JSON 代码,与预期的原始请求一样接近,同时仍然有效。

如果您向我们展示了您用来执行此操作的 PHP 代码,将会有所帮助;没有它,我真的不能就如何改进它给你建议,但是如果你想切换到方括号表示法,你所需要的只是将你的 PHP 对象放入一个无键数组中,并且json_encode()应该为你做这一切; 您不需要为此使用键控数组或迭代器。

于 2013-01-07T11:21:42.463 回答
1

它可以这样构建:

$arr = array(
    array(
        'id' => 123,
        'info' => array(
            'code' => 'ZGE',
            'description' => 'test1',
            'type' => 'AVL'
        )
    ),
    array(
        'id' => 456,
        'info' => array(
            'code' => 'ZDN',
            'description' => 'test2',
            'type' => 'CLR'
        )
    )
);

echo json_encode($arr);

输出

[
    {
        "id": 123,
        "info": {
            "code": "ZGE",
            "description": "test1",
            "type": "AVL"
        }
    },
    {
        "id": 456,
        "info": {
            "code": "ZDN",
            "description": "test2",
            "type": "CLR"
        }
    }
]
于 2013-01-07T11:23:27.793 回答
0

json_encode 应该产生您看到的输出的唯一原因是向您传递给 json_encode 的数组添加另一个命名键,默认情况下它应该按您的意愿工作:

$json = '[
    {
        "id": "123",
        "recall_info": {
            "code":"ZGE",
            "description": "test1",
            "type": "AVL",
            "date": "09/08/2012"
        }
    },
    {
        "id": "123",
        "recall_info": {
            "code": "ZDN",
            "description": "test2",
            "type": "CLR",
            "date": "16/02/2012"
        }
    }
]';

$php = array(
    (object) array(
        'id' => '123',
        'recall_info' => (object) array(
            'code' => 'ZGE',
            'description' => 'test1',
            'type' => 'AVL',
            'date' => '09/08/2012'
        )
    ),
    (object) array(
        'id' => '123',
        'recall_info' => (object) array(
            'code' => 'ZGE',
            'description' => 'test2',
            'type' => 'CLR',
            'date' => '16/02/2012'
        )
    )
);

var_dump(json_encode($php));
于 2013-01-07T11:20:47.393 回答