c# - 如何读取json数据

标签 c# .net json

我有以下 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/

相关文章:

c# - 我无法使用反射订阅我的事件

.net - 使用 CodeDomProvider 编译到内存时,程序集找不到引用的程序集

.net - 如何在 .NET Framework 中更新浏览器功能的定义?

ruby - 将 cURL 请求转换为 Ruby post 请求

Python 可序列化对象 json

c# - 从 .NET 中的 app.config 或 web.config 读取设置

c# - FakeItEasy 的 Out 和 Ref 参数

c# - 为什么对具有两个命名属性的对象列表使用字典?

.net - 如何使用 ASP.NET 在 web.config 文件中写入 appSetting?

python - Pandas - 从字典中的嵌套键值和嵌套列表创建数据框