web-dev-qa-db-ja.com

このjson文字列を文字列配列c#に解析します

私がやりたいことに1行2行のソリューションがあるように感じます:次のように文字列を解析します。

 "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"

このようなものに:

    string[] result = { "12345", "SOME-CITY", "UK", "false" };

これを行う最も簡単な方法は何ですか?

8
mdc
string json = "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}";

var dict = new JavaScriptSerializer().Deserialize<Dictionary<string,object>>(json);
var postalCode = dict["postalcode"];

//Array is also possible
string[] result = dict.Select(kv => kv.Value.ToString()).ToArray();
22
L.B

Newtonsoftを使用することもできます: http://james.newtonking.com/pages/json-net.aspx

string json = @"{
  ""Name"": ""Apple"",
  ""Expiry"": new Date(1230422400000),
  ""Price"": 3.99,
  ""Sizes"": [
    ""Small"",
    ""Medium"",
    ""Large""
  ]
}";

JObject o = JObject.Parse(json);

string name = (string)o["Name"];
// Apple

JArray sizes = (JArray)o["Sizes"];

string smallest = (string)sizes[0];
// Small

私は別の関連する投稿を見つけました: JSON to C#の文字配列
Lib: http://msdn.Microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

4
VRC

JavaScriptSerializer を使用して、jsonをdynamicオブジェクトにシリアル化し、名前を介してプロパティにアクセスできるようにすることができます。

var address = new JavaScriptSerializer().Deserialize<dynamic>(json);
Console.WriteLine(address["postalcode"]);
3
James

入力文字列はJSON文字列のようです。必要に応じて、JSONデシリアライザを使用できます。そうでない場合、次のように名前付きグループとともに正規表現を使用できます。

List<string> values = new List<string>();
List<string> keys= new List<string>();

string pattern = @"\""(?<key>[^\""]+)\""\:\""?(?<value>[^\"",}]+)\""?\,?";
foreach(Match m in Regex.Matches(input, pattern))
{
    if (m.Success)
    {
        values.Add(m.Groups["value"].Value);
        keys.Add(m.Groups["key"].Value);
    }
}

var result = values.ToArray();

正規表現の名前付きグループは(?<group-name>pattern)で示されます。上記のパターンでは、2つの名前付きグループkeyvalueがあり、Matchインデクサーを使用してGroupsオブジェクトから取得できます。

3
Sina Iravanian