php - 返回 json enconde 关联数组只有一项
问题描述
我有一个$variable = array(...);
我需要像这样打印一个 JSON 响应
{
info: {
"foo": true,
"bar": "lion"
},
data: [
{"id": 123,
"name": "foo",
"baz": { "some":1,
"data":true
}
},
{"id": 321,
"name": "bar",
"baz": {}
}
]
}
所以,问题在于response["data"][1]["baz"]
有时,这个变量可以是一个空数组{}
,但是当我使用json_encode
它作为无关联数组返回时[]
我需要这个变量作为关联数组
但是如果在 PHP 中我们把
echo json_encode($variable,JSON_FORCE_OBJECT);
退货
{
info: {
"foo": true,
"bar": "lion"
},
data: {
0: {"id": 123,
"name": "foo",
"baz": { "some":1,
"data":true
}
},
1: {"id": 321,
"name": "bar",
"baz": {}
}
]
}
并且response["data"]
必须是无关联数组
因此,
baz
作为关联数组返回{}
(即使为空,这也是问题所在)。data
始终作为无关联数组返回[]
。
response["data"]
必须是一个列表,因为它是由 javascript 中的外部库读取的
解决方案
如果您将所讨论的属性设置为一个ArrayObject
而不是内置数组,则无论它是否为空,它将被序列化为一个对象。
# Converting the existing array, which may be empty, to an ArrayObject
$baz = new ArrayObject($baz);
# Or create a new ArrayObject
$baz = new ArrayObject();
$baz['a'] = 'b';
或者,您可以在数组为空的情况下使用stdClass类。这将被序列化为一个空对象 ( {}
)。
if (empty($baz)) {
$baz = new stdClass();
}
推荐阅读
- r - 未找到 Highcharter 包 - highchart 功能不可用
- python - python - 如何使用python中的第二个键对对列表进行排序?
- python - 如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?
- ios - 为什么 SKSpriteNode(fileNamed:) 使用 Swift 在 iOS 中生成 nil?
- android - Android(sqlite) 如何使用 where 子句查看数据?
- .net-traceprocessing - .net-traceprocessing 如何使用WaitAnalysis?
- c# - 如何防止在构造函数完成之前调用事件处理程序?
- python - 编码 Scrapy 输出以允许使用法语字母
- vuejs2 - 我们如何使用 Bootstrap-Vue Carousel 显示多个项目?
- java - How do I add arrays to an Arraylist of Arrays (Arraylist
)