zoukankan      html  css  js  c++  java
  • PHP json_encode转换空数组为对象

    问题描述:

    php在给端提供接口,比如PC和安卓,ios等,如果返回json格式的数据,当返回数据的为数组,且key为字符串时,json化后将返回jsonObject,但是如果是空数组,有可能返回的就是jsonArray,数据结构不一致导致端解析json失败。

    如:

     $arr = [
         'id' => 123.,
         'name' => 'andrew',
     ];
    
     $jsonRet = json_encode($arr);
    
     print_r($jsonRet);

    输出:

    {
      "id": 123,
      "name": "andrew"
    }

    但是如果是:

    $arr = [];
    $jsonRet = json_encode($arr);
    
    print_r($jsonRet);

    输出:

    [
      
    ]

    如何在数组为空时也是JsonObject呢?

    方法一:

    使用JSON_FORCE_OBJECT

    $arr = [];
    
    $jsonRet = json_encode($arr, JSON_FORCE_OBJECT);
    
    print_r($jsonRet);

    此法有一弊端,eg:

    $arr = [
        'jsonArray' => [
            '21', '12', '13'
        ],
        'jsonObject' => []
    ];
    
    $jsonRet = json_encode($arr,JSON_FORCE_OBJECT);
    
    print_r($jsonRet);

    输出:

    {
      "jsonArray": {
        "0": "21",
        "1": "12",
        "2": "13"
      },
      "jsonObject": {
        
      }
    }

    原本jsonArray的也被jsonObject化了,局部的改变不能影响全局

    方法二(推荐)

    使用 ArrayObject

    $arr = [
        'jsonArray' => [
            '21', '12', '13'
        ],
        'jsonObject' => new ArrayObject()
    ];
    
    $jsonRet = json_encode($arr);
    
    print_r($jsonRet);

    输出:

    {
      "jsonArray": [
        "21",
        "12",
        "13"
      ],
      "jsonObject": {
        
      }
    }

    注:PHP版本为7.1.8

  • 相关阅读:
    为什么 JVM 不用 JIT 全程编译?
    JVM Internals
    JIT与JVM的三种执行模式:解释模式、编译模式、混合模式
    Dart编译技术与平台
    Dart 库预览
    使用VSCode开发Flutter
    环境变量
    使用Homebrew管理你的mac开发包
    brew 又叫Homebrew,是Mac OSX上的软件包管理工具
    使用async/await消除callback hell
  • 原文地址:https://www.cnblogs.com/AndrewGhost/p/8386951.html
Copyright © 2011-2022 走看看