【问题标题】:Creating JSON that contains both arrays and objects from a mySQL data source从 mySQL 数据源创建包含数组和对象的 JSON
【发布时间】:2013-11-06 11:40:10
【问题描述】:

我正在尝试创建存储在 mySQL 中的数据的 JSON 表示形式。

我正在尝试记录一个 RESTful API。

我正在使用 PHP 的 json_encode() 函数。

我有一个表,其中包含诸如

之类的数据

1) 名称 2) 父母 3)data_type(对象/数组/字符串/数字匹配JSON数据类型) 4) 价值

我正在尝试创建一个通用函数,它允许我通过简单地将数据添加到 mySQL 数据库来构建这些 JSON 字符串。

我在同时使用对象和数组时遇到了问题。

例如 JSON 应该是:

{
"sessionToken":"","roleName":""
,"data":[
                {
                    "methodTypes":[""] , "objects":[""]
                }
            ]
}

然而它是这样出来的:

{
    "sessionToken":"","roleName":""
    ,"data":[
                {
                "methodTypes":[""]
            }
            ,{
                "objects":[""]
                }
            ]
}

这表明出于某种原因我的代码正在为 methodType 和对象添加一个对象,因为它应该只是在单个对象中。

我正在尝试首先创建一个包含方法类型和对象的数组。 然后我以 $objects->$A 的格式创建一个对象,并使其与第一步中创建的数组相等。 然后我添加到 JSON 生成的主数据数组中。

当同一 JSON 中需要数组和对象但没有成功时,我一直在搜索显示 JSON 使用示例的示例。

任何正确方向的指针将不胜感激。

更新#1:

输入到 json_encode() 的数组的 var_dump 是:

array(3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=>     array(2) { [0]=> array(1) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } } [1]=>     array(1) { ["objects"]=> array(1) { [0]=> string(0) "" } } } }

如果我采用已知良好的 JSON 并执行 json_decode() 那么 var_dump 看起来像:

object(stdClass)#3 (3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=> array(1) { [0]=> object(stdClass)#4 (2) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } ["objects"]=> array(1) { [0]=> string(0) "" } } } }

array(3) { ["sessionToken"]=> string(0) "" ["roleName"]=> string(0) "" ["data"]=> array(1) { [0]=> array(2) { ["methodTypes"]=> array(1) { [0]=> string(0) "" } ["objects"]=> array(1) { [0]=> string(0) "" } } } }

如果我将其设置为 TRUE 以返回数组而不是对象。

【问题讨论】:

  • 你能把你正在使用的数组的var_dumpjson_encode 一起发布吗?我认为您的数据结构可能在这方面有误
  • Machavity 感谢您的回复。我已经更新了帖子以显示 var_dump 信息。我可以添加任何其他内容来帮助使问题更清晰吗?
  • 尝试只使用 php 数组,因为它们也可以是关联的,json_encode 将在需要时调整为 javascript 对象。例如$arr['foo']=array('bar', 'gggg') 将转换为{"foo":["bar", "gggg"]}
  • 这是一个非常有用的 php 沙箱,可以在浏览器中使用 sandbox.onlinephpfunctions.com 测试 php 代码
  • Charliefl 如果可以的话那就太好了,不过我不知道该怎么做。您能否提供一个工作示例,该示例将生成与此问题发布中第一个黑色代码相等的 JSON?我试过 `$test = array('sessionToken'=>'' ,'roleName'=>'' ,'data' => array('methodTypes' => array() ,'objects' => array() ) ; $test_json = json_encode($test) ; echo $test_json 没有运气

标签: php mysql arrays json object


【解决方案1】:

编辑以提供所需的输出

$data = ['sessionToken' => '',
    'roleName' => '',
    'data' => [['methodTypes' => [''], 'objects' => ['']]]
];

它会产生。这是有效的,因为我将关联数组包装在一个非关联数组中

{"sessionToken":"","roleName":"","data":[{"methodTypes":[""],"objects":[""]}]}

编辑

更多关于json_encode的信息 Javascript 数组仅包含数字键。时期。如果你有一个看起来像关联数组的东西,它实际上是一个 JS 对象(可以使用括号引用,即 var['name']var.name 是等价的)。

由于json_encode 无法在 JSON 中创建关联数组,它会将关联的 PHP 数组转换为对象。所以你可以在我上面的例子中看到,我得到了一个对象而不是一个数组,除非我没有指定键。

echo json_encode(['name' => 'value']);

产量

{"name":"value"}

虽然

echo json_encode(['value']);

产量

["value"]

【讨论】:

  • Machavity 我需要创建的 JSON 需要进行数学运算:{"sessionToken":"","roleName":"","data":[{"methodTypes":[""] ,"objects":[""] }]} 在非编程代码中,一般格式类似于data.[].{}.methodTypes,其中方括号[] 表示 JSON 数组,而大括号方括号{} 表示 JSON 对象。我相信 API 是这样的,因为您可以发送多个对象。
  • 编辑了我的回复。会给你你想要的字符串
猜你喜欢
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2022-09-22
  • 1970-01-01
  • 2018-07-03
  • 2022-01-19
  • 2013-06-14
相关资源
最近更新 更多