1

JSON 文字列を次のように指定します。

{
    "__ENTITIES": [
        {
            "__KEY": "196",
            "__STAMP": 1,
            "ID": 196,
            "firstName": "a",
            "middleName": "b",
            "lastName": "c",
            "ContactType": {},
            "addressCollection": {
                "__deferred": {
                    "uri": "/rest/Contact(196)/addressCollection?$expand=addressCollection"
                }
            },
            "__ERROR": [
                {
                    "message": "Cannot save related entity of attribute \"ContactType\" for the entity of datastore class \"Contact\"",
                    "componentSignature": "dbmg",
                    "errCode": 1537
                }
            ]
        }
    ]
}

__ERRORレコード だけを取得する方法はありますか?オブジェクトvar mydata = json.parse(mydata)から使用して検索できることはわかっていmydataます。しかし、JSON文字列全体をオブジェクトに変換せずに、フィールドのみを返すメソッドがあり、フィールド内の情報のみを取得する方法があることを望んでいERRORまし json.parse(mydata, "__ERROR")__ERROR

4

3 に答える 3

4

__ERROR「レコードだけを取得する方法はありますか。使用できることはわかっていますvar mydata = json.parse(mydata)...しかし、あることを望んでいました...次のようなものですjson.parse(mydata, "__ERROR")

これを行うライブラリはあるかもしれませんが、何も組み込まれていません。必要なデータを対象とするコードを記述する必要があります。

最も近いのは、reviver 関数を に渡すことJSON.parseです。

var errors = [];

var mydata = JSON.parse(mydata, function(key, val) {
    if (key === "__ERROR")
        errors.push(val);
    return val
});
于 2013-01-24T15:18:12.283 に答える
1

json 文字列全体をオブジェクトに変換せずに

それはほとんど不可能です.JSには適していないものには、ある種の遅延評価が必要です. また、ネイティブよりもかなり遅い独自のパーサーを作成する必要がありますJSON.parse

__ERROR レコードだけを取得する方法はありますか

私が知っているわけではありません。また、オブジェクト ツリー全体をたどってその名前の最初のプロパティを探すのは、通常とは異なるタスクです。__ENTITIES[0].__ERROR[0]明示的にアクセスすることをお勧めします。

于 2013-01-24T15:55:16.247 に答える
1

そのような関数が存在する場合、探しているキーを見つけるために、とにかく全体を解析する必要があります。

最初に解析してから、必要なキーを取得します。

var mydata = JSON.parse(mydata);
var errorObj = mydata.__ENTITIES[0].__ERROR[0];

必要に応じて、独自の関数を作成できます。

function parseAndExtract(json, key) {
    var parsed = JSON.parse(json);
    return parsed[key];
}
于 2013-01-24T15:18:10.113 に答える