【问题标题】:Transforming array into json with PHP使用PHP将数组转换为json
【发布时间】:2015-04-19 00:45:05
【问题描述】:

我有这个数组

$params_array['application_id'] = 'xxxxxxxxx';
$params_array['v'] = 1.20;
$params_array['src'] = 'http://www.google.com/logos/2011/yokoyama11-hp.jpg';
$params_array['functions']['name'] = 'blur';
$params_array['functions']['params']['radius'] = '0.0';
$params_array['functions']['params']['sigma'] = '2.0';
$params_array['functions']['save']['image_identifier'] = 'MY_CLIENT_ID';

我需要把它转成json。

所以我正在这样做:

$json = json_encode($params_array,JSON_UNESCAPED_SLASHES);

结果是

{"application_id":"xxx","v":1.2,"src":"http://www.google.com/logos/2011/yokoyama11-hp.jpg","functions":{"name":"blur","params":{"radius":"0.0","sigma":"2.0"},"save":{"image_identifier":"MY_CLIENT_ID"}}}

但是,该 json 的接收方 API 希望它的形式稍有不同,如下所示:

{"application_id":"xxx","v":1.2,"src":"http://www.google.com/logos/2011/yokoyama11-hp.jpg","functions":[{"name":"blur","params":{"radius":"0.0","sigma":"2.0"},"save":{"image_identifier":"MY_CLIENT_ID"}}]}

区别:在“functions”之后:有这个括号[,最后是闭合的。

PHP 不知何故不会用这个括号创建 json。

我怎样才能让 PHP 用这些括号创建 json?

接收方API为http://www.blitline.com/docs/quickstart

【问题讨论】:

  • 什么是接收API?
  • json_encode 的输出是正确的 JSON 语法。检查您的接收器 API,以确保这是正确的。在这里尝试不同的版本; jsoneditoronline.org

标签: php json


【解决方案1】:

你应该这样准备你的结构:

$params_array['application_id'] = 'xxxxxxxxx';
$params_array['v'] = 1.20;
$params_array['src'] = 'http://www.google.com/logos/2011/yokoyama11-hp.jpg';
$params_array['functions'][0]['name'] = 'blur';
$params_array['functions'][0]['params']['radius'] = '0.0';
$params_array['functions'][0]['params']['sigma'] = '2.0';
$params_array['functions'][0]['save']['image_identifier'] = 'MY_CLIENT_ID';

(对数字索引数组进行函数。)

【讨论】:

    【解决方案2】:

    所以接收者期望functions 是数组对象,但你传递的是单个对象。将$params_array['functions']['name'] 更改为$params_array['functions'][$functionIndex]['name']

    【讨论】:

    • 可以,但是stackoverflow说等7分钟
    • 这不会为除了name 之外的每个属性创建一个新数组吗? paramssave 应该与 name 在同一个数组中
    • 是的,所以你必须明确索引
    【解决方案3】:

    试试这个

    $params_array['application_id'] = 'xxxxxxxxx';
    $params_array['v'] = 1.20;
    $params_array['src'] = 'http://www.google.com/logos/2011/yokoyama11-hp.jpg';
    $function_array['name'] = 'blur';
    $function_array['params']['radius'] = '0.0';
    $function_array['params']['sigma'] = '2.0';
    $function_array['save']['image_identifier'] = 'MY_CLIENT_ID'; 
    $params_array['functions'] = array($function_array);
    

    原因: JSON_ENCODE 会将数组视为JSON OBJECT,如果它类似于Key=>Value 如果它是基于索引的[0] => value,它将被视为json array

    【讨论】:

      【解决方案4】:

      好了,运行这个例子你就知道怎么实现了。

      $params_array = array();
      $params_array['application_id'] = 'xxxxxxxxx';
      $params_array['another_array'] = array("A","B","C");
      echo json_encode($params_array );
      

      结果:{"application_id":"xxxxxxxxx","another_array":["A","B","C"]}

      【讨论】:

        【解决方案5】:

        如果您有 PHP 5.4.0 或更高版本,您可以尝试使用标志 JSON_FORCE_OBJECT

        $json = json_encode($params_array,JSON_UNESCAPED_SLASHES + JSON_FORCE_OBJECT);

        【讨论】:

        • 注意:使用未定义的常量 JSON_UNESCAPED_SLASHES - 假定为 'JSON_UNESCAPED_SLASHES'
        • ... 在 PHP php.net/manual/en/json.constants.php
        猜你喜欢
        • 2018-07-30
        • 2015-07-02
        • 2016-07-07
        • 2013-06-18
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        • 2011-05-18
        • 2014-08-23
        相关资源
        最近更新 更多