我有以下 json 数据,我需要从中读取数据并进行一些比较。
{"expiration": "2013-04-01T00:00:00Z",
"conditions": [
{"bucket": "the-s3-bucket-in-question"},
["starts-with", "$key", "donny/uploads/"],
{"acl": "private"},
["eq", "$Content-Type", "text/plain"],
["starts-with", "x-amz-meta-yourelement", ""],
["content-length-range", 0, 1048576]
]
}
通过使用下面的代码我找到了第一个元素
var policy = Encoding.UTF8.GetString(policyByteArray);
JObject obj = JObject.Parse(policy);
string policyexpiration = obj.First.First.Path;
我已使用 JToken
查找所有条件,但我只得到该数组中的一个元素。你能帮我得到条件中存在的所有元素吗?
以下是我使用JToken
JToken entireJson = JToken.Parse(policy);
var items = entireJson["conditions"].Value<JArray>()[0];
XmlDocument xdoc = (XmlDocument)JsonConvert.DeserializeXmlNode(items.ToString(), "root");
XmlNode xmlarray = xdoc.GetElementsByTagName("root")[0];
foreach (XmlNode xmlelement in xmlarray)
{
}
最佳答案
我完全不确定您为什么需要 XML 工具。使用 Json.NET 迭代 json 结构中的“条件”很简单,而且您已经非常接近了。
var items = entireJson["conditions"].Value<JArray>();
foreach (JToken condition in items)
{
//do work on one condition here
}
请注意,这个 json 结构有点奇怪。单个条件可以是数组,例如 ["starts-with", "$key", "donny/uploads/"]
或对象,例如 {"bucket": "the-s3-bucket-in-question"
.
根据您要对条件执行的操作,您可能需要区分两者。您可以对 Json.NET 类型使用 C# 的 is
运算符,如下所示:
var items = entireJson["conditions"].Value<JArray>();
foreach (JToken condition in items)
{
if (condition is JArray)
{
//do something with the array
}
else if (condition is JObject)
{
//do something with the object
}
}
关于c# - 如何读取json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23284322/