【发布时间】:2012-02-02 13:45:51
【问题描述】:
我想将 php 数组 转换为 json 字符串以用于 JavaScript InfoVis Toolkit 格式。
Json 规范格式: InfoVis-loading and serving JSON data
我有这个 php 数组:$my_array:
Array
(
[item_1] => Array
(
[id] => item_1_ID
[name] => item_1_NAME
[data] => item_1_DATA
[children] => Array
(
[door] => Array
(
[id] => door_ID
[name] => door_NAME
[data] => door_DATA
[children] => Array
(
[mozart] => Array
(
[id] => mozart_ID
[name] => mozart_NAME
[data] => mozart_DATA
[children] => Array
(
[grass] => Array
(
[id] => grass_ID
[name] => grass_NAME
[data] => yes
)
[green] => Array
(
[id] => green_ID
[name] => green_NAME
[data] => no
)
[human] => Array
(
[id] => human_ID
[name] => human_NAME
[data] => human_DATA
[children] => Array
(
[blue] => Array
(
[id] => blue_ID
[name] => blue_NAME
[data] => blue_DATA
[children] => Array
(
[movie] => Array
(
[id] => movie_ID
[name] => movie_NAME
[data] => yes
)
)
)
)
)
)
)
)
)
[beat] => Array
(
[id] => beat_ID
[name] => beat_NAME
[data] => yes
)
[music] => Array
(
[id] => music_ID
[name] => music_NAME
[data] => no
)
)
)
)
现在如果我 json_encode($my_array);
{
"item_1": {
"id": "item_1_ID",
"name": "item_1_NAME",
"data": "item_1_DATA",
"children": {
"door": {
"id": "door_ID",
"name": "door_NAME",
"data": "door_DATA",
"children": {
"mozart": {
"id": "mozart_ID",
"name": "mozart_NAME",
"data": "mozart_DATA",
"children": {
"grass": {
"id": "grass_ID",
"name": "grass_NAME",
"data": "yes"
},
"green": {
"id": "green_ID",
"name": "green_NAME",
"data": "no"
},
"human": {
"id": "human_ID",
"name": "human_NAME",
"data": "human_DATA",
"children": {
"blue": {
"id": "blue_ID",
"name": "blue_NAME",
"data": "blue_DATA",
"children": {
"movie": {
"id": "movie_ID",
"name": "movie_NAME",
"data": "yes"
}
}
}
}
}
}
}
}
},
"beat": {
"id": "beat_ID",
"name": "beat_NAME",
"data": "yes"
},
"music": {
"id": "music_ID",
"name": "music_NAME",
"data": "no"
}
}
}
}
但对于 InfoVis,当前的 json 输出 (json_encode($my_array)) 有 3 个问题:
- 没有使用 [ ]i>
- 'children' 数组有键名
- 数组项带有它们的键名 -> 示例:“item_1”:{ ....
让我指出这个问题,也许你可以帮助一个函数来转换这个 json 字符串:
查看这段 json_encode($my_array) 输出:
{
"item_1": {
"id": "item_1_ID",
"name": "item_1_NAME",
"data": "item_1_DATA",
"children": {
"door": {
"id": "door_ID",
1。问题1:
{
"item_1": {
我们必须删除这些键,例如:“item_1”:
2。问题2:
"children": {
"door": {
"id": "door_ID",
正确的代码应该是:
"children": [
{
"id": "door_ID",......
“门”:被移除...因为它是一把钥匙
"children": { => 变成""children": [
'children' 的工作示例:
"children": [
{
"id": "grass_ID",
"name": "grass_NAME",
"data": "yes"
},
{
"id": "green_ID",
"name": "green_NAME",
"data": "no"
}
]
澄清WORKING Json InfoVis格式的完整示例:
json = {
id: "node02",
name: "0.2",
children: [{
id: "node13",
name: "1.3",
children: [{
id: "node24",
name: "2.4"
}, {
id: "node222",
name: "2.22"
}]
}, {
id: "node125",
name: "1.25",
children: [{
id: "node226",
name: "2.26"
}, {
id: "node237",
name: "2.37"
}, {
id: "node258",
name: "2.58"
}]
}, {
id: "node165",
name: "1.65",
children: [{
id: "node266",
name: "2.66"
}, {
id: "node283",
name: "2.83"
}, {
id: "node2104",
name: "2.104"
}, {
id: "node2109",
name: "2.109"
}, {
id: "node2125",
name: "2.125"
}]
}, {
id: "node1130",
name: "1.130",
children: [{
id: "node2131",
name: "2.131"
}, {
id: "node2138",
name: "2.138"
}]
}]
};
清楚吗?
希望任何人都可以帮助我.. 我已经为此工作了好几天!
谢谢。
【问题讨论】:
-
按照
json_encode首先需要的方式格式化数组有什么难的? -
您好,如果不是太长,您能否给我们用于生成数组的 PHP 代码?我认为您的问题来自这里,而不是
json_encode函数。您必须使用数字键才能生成 JSON Array ([])。 -
这个数组是通过这个函数生成的:stackoverflow.com/questions/8676339/…@hakre 那是因为 InfoVis json 规范见:thejit.org/static/v20/Docs/files/Loader/Loader-js.html
标签: php arrays json parsing infovis