3

クライアント側で、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
  }
}

明らかな解決策の 1 つは、分割せずに json 全体を保存することです。ただし、データベースに関しては賢明ではないようです。各ドキュメントに個別にアクセスできるようにしたい。使用して

 $jsonobj = array ($key => json_decode($row["json"]));

明らかに機能しますが、残念ながら1つのキーだけです...

編集:明確化のために* phpで:違いがあります

array("a", "b", "c")      

   array ("1" => "a", "2" => "b", "3" => "c").

後者は、この $array["1"] = "a" のように実行すると、 array("1" => "a" )ではなくarray("a") になります。

ここで回答

4

4 に答える 4

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"
    }
}
于 2012-07-26T22:37:13.233 に答える
2

試す

echo json_encode((object)$jsonobj);
于 2012-07-26T22:13:38.700 に答える
0

連想配列のキーとして数値を設定するには、次のコードを使用できます

$arr=array(); //declare array variable
$arr[121]='Item1';//assign Value
$arr[457]='Item2';
.
.
.
print_r($arr);//print value
于 2015-07-22T11:29:58.117 に答える
0

データベースの単一のエントリ内に両方を保存するだけです: 個別のフィールド値と個別の列内の json 構造全体。このようにして、単一のフィールドで検索し、有効な json 構造を取得して簡単に処理できます。

于 2012-07-26T22:15:59.490 に答える