我正在尝试简单地回显包含数据库表中每一行的JSON对象文字。
作为我所看到的许多其他类似问题中的方法的标准,我正在获取每一行并对其进行编码:
$con=mysqli_connect("localhost","username","pass","markers");//markers is db table name
$result = mysqli_query($con,"SELECT * FROM markers");
$rows = array();
while($r = mysqli_fetch_array($result))
{
$rows[] = $r
//or: $rows[] = array('data' => $r);
}
echo json_encode($rows);
与问题PHP: can't encode json with multiple rows或mysql table to json类似,
我想回显一个看起来像这样的JSON对象:
{
"data1": // how do I get "data1"?
{
name: John Smith,
title: Mr,
description: a man
}
}
{
"data2":{ // how do I get "data2"?
name:Bob Smith,
title: Mr,
description: another guy
}
}
除了我没有得到如何实现“标题”,第一级对象字符串的标题,如“data1”或data2“。事实上,我的数据库表甚至没有那些值/那一栏。
这就是它现在的样子:
如何才能获得简单的数字“标题”,如“1”,“2”或“data1”,“data2”,而无需将“名称”列指定为“标题”? (或者我必须有一个专栏吗?)
我的目标是处理返回的JSON中每个“行”中的值。
我打算使用jQ $ .each函数$.each(data, function(dataNum, dataInfo)
- 例如data1将传递给dataNum,值将传递给dataInfo - 并且能够通过dataInfo.name
访问特定的表值,而现在这些值不起作用。
提前感谢您的帮助!
答案 0 :(得分:2)
我认为使用mysqli_fetch_object()
将每一行作为自己的对象更好。当你然后json_encode $rows
时,你会有一个对象数组。
以下是代码:
$con=mysqli_connect("localhost","username","pass","markers");//markers is db table name
$result = mysqli_query($con,"SELECT * FROM markers");
$rows = array();
while($r = mysqli_fetch_object($result))
{
$rows[] = $r;
}
echo json_encode($rows);
你的JSON看起来像这样:
[
{
"name":"Some Name",
"title":"Some Title",
"description":"Some description"
},
{
"name":"Some Other Name",
"title":"Some Other Title",
"description":"Some other description"
},
...
]
在javascript中,它为您提供了一个整数索引的对象数组。所以你的javascript可能看起来像这样:
var array = JSON.parse(jsonString);
$.each(array, function(key, value) {
alert(key); // numerical index
alert(value.name); // name
alert(value.title); // title
alert(value.description); // description
});
答案 1 :(得分:0)
在$ rows变量中创建索引:
<?php
$t['a'] = array ('name' => 'foo');
$t['b'] = array ('name' => 'bar');
echo json_encode ($t);
?>
在你的情况下,一个简单的整数应该可以做到这一点,或类似$rows['data' . $i]
后跟$ i ++。