我正在尝试从DB中为客户端重新创建json。不幸的是,json中的一些键是数字,它们在javascript中运行良好,但是因此PHP将它们视为数字而不是关联数组。每个键都用于文档。让我告诉你:
PHP:
$jsonobj;
while ($row = mysql_fetch_assoc($ms)) {
$key = strval($row["localcardid"]);
$jsonobj[$key] = json_decode($row["json"]);
}
// $jsonobj ist still a numeric array
echo json_encode($jsonobj);
生成的json应如下所示:
{
"0": {
"terd": "10",
"id": 0,
"text": "",
"pos": 1,
"type": 0,
"divs": [
{},
{}
],
"front": 1
}
"1": {
"terd": "10",
"id": 0,
"text": "",
"pos": 1,
"type": 0,
"divs": [
{},
{}
],
"front": 1
}
}
一个明显的解决方案是保存整个json而不会分裂。然而,就db而言,这似乎并不明智。我希望能够单独访问每个文档。使用
$jsonobj = array ($key => json_decode($row["json"]));
显然有效,但不幸的是只有一把钥匙......
编辑:澄清* 在PHP中:
之间存在差异array("a", "b", "c")
和
array ("1" => "a", "2" => "b", "3" => "c").
后者,当像这样完成$ array [“1”] =“a”导致数组(“a”)而不是数组(“1”=>“一个“)
答案HERE
答案 0 :(得分:2)
尝试
echo json_encode((object)$jsonobj);
答案 1 :(得分:2)
我相信如果你传递JSON_FORCE_OBJECT
选项,它应该输出带有你想要的数字索引的对象:
$obj = json_encode($jsonObj, JSON_FORCE_OBJECT);
示例:
$array = array();
$array[0] = array('test' => 'yes', 'div' => 'first', 'span' => 'no');
$array[1] = array('test' => 'no', 'div' => 'second', 'span' => 'no');
$array[2] = array('test' => 'maybe', 'div' => 'third', 'span' => 'yes');
$obj = json_encode($array, JSON_FORCE_OBJECT);
echo $obj;
输出:
{
"0": {
"test": "yes",
"div": "first",
"span": "no"
},
"1": {
"test": "no",
"div": "second",
"span": "no"
},
"2": {
"test": "maybe",
"div": "third",
"span": "yes"
}
}
答案 2 :(得分:0)
只需将两者保存在数据库中的单个条目中:单独的字段值和单独列中的整个json结构。这样,您可以通过单个字段进行搜索,并仍然可以获得有效的json结构,以便于处理。
答案 3 :(得分:0)
要将数字设置为关联数组中的键,我们可以使用以下代码
$arr=array(); //declare array variable
$arr[121]='Item1';//assign Value
$arr[457]='Item2';
.
.
.
print_r($arr);//print value