私がやりたいことには、1行2行の解決策があるように感じます: 次のような文字列を解析します:
"{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"
このようなものに:
string[] result = { "12345", "SOME-CITY", "UK", "false" };
これを行う最も簡単な方法は何ですか?
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();
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 string array in C#
Lib:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx
入力文字列は 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)
ます。key
上記のパターンには、 とという 2 つの名前付きグループがあります。これらは、インデクサーを使用してオブジェクトvalue
から取得できます。Match
Groups
JavaScriptSerializerを使用して json をdynamic
オブジェクトにシリアル化し、名前を介してプロパティにアクセスできるようにすることができます。
var address = new JavaScriptSerializer().Deserialize<dynamic>(json);
Console.WriteLine(address["postalcode"]);