2

オブジェクトからデータを抽出するのに問題はありません。私の問題は、文字列内のデータを編集して再エンコードすることです。オブジェクトを編集しようとするたびに、オブジェクト内のすべてのデータが削除され、編集したものだけが保存されます。

私はこれがうまくいったと思っていたでしょうが、そうではありません。助言がありますか? (以下はオブジェクトモードで示しています。連想配列としても試してみましたが、同じ結果が得られました)

    $jsonString = '[{ "stuff" : [{"name" : "name", "description" : "description", "id" : "id",}], "morestuff" : []}]';
    $name = 'new name';
    $description = 'new description';
    $obj_json = json_decode($jsonString);
    $obj_json->stuff->name = $name;
    $obj_json->stuff->description = $description;
    $newJsonString = json_encode($obj_json);

これは後に印刷されるものです:

{ "stuff" : {"name" : "new name", "description" : "new description"}}
4

2 に答える 2

2

あなたのコードは正しいようですが、これを試してみてください(オブジェクトを変更することで何かがあるかもしれません..):

$obj_json = json_decode($jsonString, true); //as associative array
$obj_json['stuff']['name'] = $name;
$obj_json['stuff']['description'] = $description;
$newJsonString = json_encode($obj_json);

jsonを連想配列として使用します

于 2013-03-26T15:47:56.650 に答える
1

あなたが求めることをすることに問題はありません:

<?php

$jsonString = '{
    "stuff": {
        "name": "Original name",
        "description": "Original description",
        "foo": "Another field"
    }
}';
$name = "New name";
$description = "New description";

$obj_json = json_decode($jsonString);
$obj_json->stuff->name = $name;
$obj_json->stuff->description = $description;
$newJsonString = json_encode($obj_json);

echo $newJsonString . PHP_EOL;

...プリント:

{"stuff":{"name":"New name","description":"New description","foo":"Another field"}}

おそらく間違ったプロパティを読み書きしています。

編集:

注意深く見てください。データは配列内にラップされており、stuffそれ自体も配列です。

$jsonString = '[{ "stuff" : [{"name" : "name", "description" : "description", "id" : "id",}], "morestuff" : []}]';
               ^            ^                                                              ^                   ^
               |            \______________________________________________________________/                   |
               \_______________________________________________________________________________________________/

編集#2:事実の場合、データは有効なJSONではなく、次をjson_decode()返しますnull

$jsonString = '[{ "stuff" : [{"name" : "name", "description" : "description", "id" : "id",}], "morestuff" : []}]';
$obj_json = json_decode($jsonString);
var_dump($obj_json, json_last_error());
NULL
int(4)

エラー#4はJSON_ERROR_SYNTAX:構文エラー、不正な形式のJSON

于 2013-03-26T16:05:04.593 に答える