【问题标题】:PHP: Converting curly braces with square bracesPHP:用方括号转换花括号
【发布时间】:2019-11-18 14:09:22
【问题描述】:

我的控制器输出的 JSON 格式有问题。它没有错,但我只需要将它更改为不同形式的 JSON。

我的 JSON 是这样的:

{"data": [{"function_name": "Y", "register_id": "1", "age": 26, "contract_from": "01-07-18", "contract_until": "31-12-99", "worked_hours": 1, "days": 9, "costs": 7, "hourly_rate": 2}]}

和我的控制器:

public function list_test(){
  $filter = $this->input->post('filter');
  $query  = $this->db->query("select * from hc where contract_from = '".$filter."'")->result();
  $data['data'] = $query;
  print_r(json_encode($data,JSON_PRETTY_PRINT));
}

如何将要交换的数据中的花括号替换为方括号?

我的预期输出:

{"data": [["Y", "1", "26", "01-07-18", "31-12-99", "1", "9","7", "2"]]}

有可能吗?

【问题讨论】:

  • 您的预期输出是无效的 JSON(检查 jsonlint.com)。您不能拥有带有命名元素的数组。
  • 没有“JSON 的不同形式”。 JSON 是单一格式。将数组转换为 json 时,它可以变成 {"foo": "bar"}(转换关联数组)或 ["foo", "bar"](索引数组)。但是拥有["foo": "bar"] 不是有效的JSON。键/值对是使用{} 的对象,而列表只是[],可以包含一个值,但不能包含名称/键。
  • 那是无效的 JSON。如果您出于某种原因需要将 {} 替换为 [],您可以在输出上执行 str_replace
  • @NigelRen 哦,很抱歉先生,我已经编辑了我的预期输出。之前输入时出现人为错误。
  • 您打算如何处理这些数据?预期的结果将很难使用,因为没有任何解释该值实际代表什么。如果您问我,您当前的输出看起来像是理想的格式。

标签: php arrays json multidimensional-array


【解决方案1】:

不确定它是否仍然是最好的结果(为什么要删除列名等有用信息)。

您需要使用 array_values()... 处理每一行以删除键...

$data = ['data' => array_map("array_values", $query) ];

我还更改了 $data 数组的创建方式,以便您知道它已正确初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-13
    • 2018-05-02
    • 1970-01-01
    • 2023-04-10
    • 2012-09-17
    • 2011-01-12
    • 2019-01-26
    相关资源
    最近更新 更多