如何对多维数组进行JSON编码?

时间:2018-09-26 11:21:28

标签: php arrays json multidimensional-array

我正在创建一个数组,用于将候选人详细信息发布到API。 该API接受JSON格式的数据,我正在使用PHP数组为该API创建数据,并使用JSON编码将其转换为JSON数组。但无法获得预期的格式

PHP代码

$postArray = array(
      "DefaultCurrency" => "USD",
      "UserName" => "data",
      "Photograph" => "data",
      "PhotographThumb" => "data",
      "Group" => "data",
      "Summary" => "data",
      "ResumeText" => "data",
      "RollupListMembership" => array(
          "RollupCode" => "data"
        ),
      "CustomFields" =>  array(
          "FieldName" => "Major",
          "Values" => array(
            $finalResumeData-> "data"
          ),
          "FieldName" => "Years of Experience",
          "Values" => array(
            $MonthsOfWorkExperience
          ),
          "FieldName" => "Executive Type",
          "Values" => array(
            $finalResumeData-> "data"
          ),
        )
    );

如果我运行此代码,因为它仅显示CustomFields的最后结果

我尝试对类似数组{p>中的各个 CustomFields 使用array()

"CustomFields" =>  array(
          array("FieldName" => "Major",
          "Values" => array(
            $finalResumeData-> "data"
          )),

我得到的结果是

CustomFields: {
    "0": {
        "FieldName" : "Value",
        "Values": ["data"]
    }
}

预期结果

"CustomFields": [
    {
      "FieldName": "string",
      "FieldType": "string",
      "Values": [
        "string"
      ]
    },
    {
      "FieldName": "string",
      "FieldType": "string",
      "Values": [
        "string"
      ]
    }
],

所以我应该在PHP数组中更新什么以获得预期的结果。

2 个答案:

答案 0 :(得分:2)

在“ CustomFields”内部,您将在一个数组中再次重复相同的键,因此它们将彼此覆盖。相反,您需要一个单独的对象数组(由PHP中的关联数组表示),即与所需JSON输出中所示的结构相同。

"CustomFields" =>  array(
      array(    
           "FieldName" => "Major",
          "Values" => array(
            $finalResumeData->data
          )
     ),
     array(
          "FieldName" => "Years of Experience",
          "Values" => array(
            $MonthsOfWorkExperience
          )
     ),
     array(
          "FieldName" => "Executive Type",
          "Values" => array(
            $finalResumeData->data
          )
    ),
)

假设您使用的是json_encode($postArray);,没有任何其他选项。

演示:https://eval.in/1059736

答案 1 :(得分:2)

我刚刚修改了您的代码,并获得了所需的输出。     

if (Request.Headers["X-MicrosoftAjax"] != "Delta=true")
{
    // Compression logic here
}

这是我得到的输出。

$postArray = array(
  "DefaultCurrency" => "USD",
  "UserName" => "data",
  "Photograph" => "data",
  "PhotographThumb" => "data",
  "Group" => "data",
  "Summary" => "data",
  "ResumeText" => "data",
  "RollupListMembership" => array(
      "RollupCode" => "data"
    ),
  "CustomFields" =>  array(
      array("FieldName" => "Major",
      "Values" => array(
        'dsadas'=> "data"
      )),
      array("FieldName" => "Years of Experience",
      "Values" => array(
        'rewrew'=>'dsa'
      )),
      array("FieldName" => "Executive Type",
      "Values" => array(
        'test'=> "data"
      )),
    )
);


echo "<pre>";print_r($postArray);
echo json_encode($postArray);
?>
相关问题