【问题标题】:Manipulate JSON node to have [] parentheses操作 JSON 节点以具有 [] 括号
【发布时间】:2022-06-21 23:48:02
【问题描述】:

来自我无法控制的第 3 方平台的 Json 响应。

$json = '{
  "question1": "answera",
  "question2": [
       "answerb",
       "answerc"]
}';

任何“问题”都可以有多个“答案”,但是如果该问题只有一个“答案”,则返回的响应不带 [] 括号 - 这会将插入中断到下一个系统(我也不控制),因为它期望 []。

使用 PHP 有没有办法将 json 字符串操作为以下,与“答案”的数量无关:

"question1": ["answera"],

【问题讨论】:

  • 当然,只要解码JSON,检查每个问题的属性,看看它是否是一个数组,如果不是,然后从中获取数据,将它放入一个数组中,并将属性设置为那个新数组。然后再次编码回 JSON。
  • P.S.我很同情,我讨厌 API 等输出格式不一致的数据。
  • 不一致的数据是开发者的地狱。

标签: php arrays json string


【解决方案1】:

您可以将字符串内容转换为数组。但是您必须为此目的迭代所有答案。

<?php
$json = '{
  "question1": "answera",
  "question2": [
       "answerb",
       "answerc"
  ]
}';

// second parameter for array result
$array = json_decode($json, true);

foreach ($array as $question => $answer) {
    if (is_string($answer) === true) {
        $array[$question] = [ $answer ];
    }
}

这导致...

array(2) {
  'question1' =>
  array(1) {
    [0] =>
    string(7) "answera"
  }
  'question2' =>
  array(2) {
    [0] =>
    string(7) "answerb"
    [1] =>
    string(7) "answerc"
  }
}

对于任何进一步的 JSON 处理,您可以将 PHP 数组转换回 JSON。

$json = json_encode($array);

结果成...

string(109) "{
    "question1": [
        "answera"
    ],
    "question2": [
        "answerb",
        "answerc"
    ]
}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2015-02-25
    • 2011-09-12
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多