16

JSON値のパスを見つけようとしています。次の JSON を検討してください。

{
    "car": {
        "type": [{
            "sedan": {
                "make": "honda",
                "model": "civics"
            }
        },
        {
            "coupe": {
                "make": "ford",
                "model": "escort"
            }
        }]
    }
}

値「honda」のパスを取得するにはどうすればよいですか? このようなものを探しています...

car_type_0_sedan_make_ホンダ

JSON.NET はこれをサポートしていますか? JToken.Pathプロパティがあるようですが、現在利用できません。http://json.codeplex.com/workitem/24136

4

4 に答える 4

24

SelectToken次のような方法を試すこともできます。

var j = JObject.Parse(json);
var token = j.SelectToken("car.type[0].sedan.make");
Console.WriteLine(token.Path + " -> " + token.ToString());

出力:

car.type[0].sedan.make -> honda
于 2014-11-10T00:39:53.770 に答える
19

Json.NETの最新バージョンに更新します。このPathプロパティは、バージョン 5.0 リリース 1 (2013 年 4 月 7 日) で追加されJTokenまし

これが機能することを確認するために使用できるテスト プログラムを次に示します。

class Program
{
    static void Main(string[] args)
    {
        string json = @"
        {
            ""car"": {
                ""type"": [{
                    ""sedan"": {
                        ""make"": ""honda"",
                        ""model"": ""civics""
                    }
                },
                {
                    ""coupe"": {
                        ""make"": ""ford"",
                        ""model"": ""escort""
                    }
                }]
            }
        }";

        JObject obj = JObject.Parse(json);
        JToken token = obj["car"]["type"][0]["sedan"]["make"];
        Console.WriteLine(token.Path + " -> " + token.ToString());
    }
}

出力:

car.type[0].sedan.make -> honda
于 2013-11-10T19:18:38.517 に答える
-3

以下のようにJsonを動的オブジェクトに変換できます。

JavaScriptSerializer js=new JavaScriptSerializer();
var dataObject=Json.Decode(jsonString);

次に、それを振り返り、文字列「honda」を見つけて、好きなようにパスを作成できます。

于 2013-11-10T18:23:15.263 に答える