【问题标题】:How to get Key:Value pair from JSON JArray?如何从 JSON JArray 获取 Key:Value 对?
【发布时间】:2016-05-01 03:11:57
【问题描述】:

我正在做一个项目,我想从这个链接 (http://www.eurogamer.net/ajax.php?action=json-comments&aid=1822104&start=0&limit=1000&filter=all&order=asc) 中提取一些数据

这个 json 文件的一部分在这里:[{"id":6044586,"u":"ubergine","uid":"472505","a":"2011\/community\/users\/4\/7\/2\/5\/0\/5\/user-472505-originalxoriginal-16-30-27.jpg","t":"3 weeks ago","k":"+16",**"p":"Prepare to Tri"**,"e":"","d":"","v":"unverified","gi":[],"s":"","mod":false,"total":"28"}]

我试过Regex,但没有发现任何好处。然后我使用Json.NET 使用JArray 它解析数据并使用JToken 但无法获取。我正在使用 C# 编程语言。 我要上面p键加粗的具体值吗?

【问题讨论】:

  • JSON 无效。 jsonlint.com
  • 你使用什么编程语言?
  • @Utkanos OP 提供的链接上的 json 是有效的。
  • 我使用的是c#语言。
  • 您到底要提取什么数据?你写了我使用Json.NET 使用JArray 它解析数据并使用JToken 但无法获取。你能分享你尝试了什么以及你卡在哪里吗?

标签: c# json json.net


【解决方案1】:

我在另一个论坛上找到了答案。它可能会帮助其他人。 这是一段代码:

    JArray parsedArray = JArray.Parse(jsonString);
        foreach (JObject parsedObject in parsedArray.Children<JObject>())
        {
            foreach (JProperty parsedProperty in parsedObject.Properties())
            {
                string propertyName = parsedProperty.Name;
                if (propertyName.Equals("p"))
                {
                    string propertyValue = (string)parsedProperty.Value;
                    Console.WriteLine("Name: {0}, Value: {1}", propertyName, propertyValue);
                }
            }
        }

这是完整代码答案的链接: https://social.msdn.microsoft.com/Forums/vstudio/en-US/df1d6c1b-349a-4f7f-9168-5bf01d320075/how-to-get-keyvalue-pair-from-json-jarray?forum=csharpgeneral

【讨论】:

    【解决方案2】:

    您最好创建一个映射到 json 属性的类并使用 JsonConvert.DeserializeObject&lt;&gt;()

    查看这个 linqpad 脚本: http://share.linqpad.net/7fpltw.linq

    source here(注意这是一个 LinqPad 脚本,因此如果您只是粘贴到 Visual Studio 中会出现错误):

    void Main()
    {
    string thejson = @"[{
        ""id"": 6044586,
        ""u"": ""ubergine"",
        ""uid"": ""472505"",
        ""a"": ""2011\/community\/users\/4\/7\/2\/5\/0\/5\/user-472505-originalxoriginal-16-30-27.jpg"",
        ""t"": ""4 weeks ago"",
        ""k"": ""+16"",
        ""p"": ""Prepare to Tri"",
        ""e"": """",
        ""d"": """",
        ""v"": ""unverified"",
        ""gi"": [],
        ""s"": """",
        ""mod"": false,
        ""total"": ""28""
    }, {
        ""id"": 6044596,
        ""u"": ""Fragtaster"",
        ""uid"": ""828120"",
        ""a"": ""2014\/community\/users\/8\/2\/8\/1\/2\/0\/user-828120-originalxoriginal-8-03-00.jpg"",
        ""t"": ""4 weeks ago"",
        ""k"": ""+44"",
        ""p"": ""This [Dark Souls 3] is one of those cases where <strong>\""more of the same\""<\/strong> is a bloody damn good-thing.<br \/>\n<br \/>\n<img src=\""https:\/\/tse2.mm.bing.net\/th?id=OIP.M607bf0698ed2368b9f9cc9e4ea244c77H0&pid=15.1\"" \/>"",
        ""e"": """",
        ""d"": """",
        ""v"": ""unverified"",
        ""gi"": [],
        ""s"": """",
        ""mod"": false,
        ""total"": ""66""
    }]";
    
        var theobj = JsonConvert.DeserializeObject<List<JsonData>>(thejson);
        theobj.ForEach(o => o.p.Dump());
    }
    
    // Define other methods and classes here
    public class JsonData
    {
        public string id { get; set; }
        public string u { get; set; }
        public string uid { get; set; }
        public string a { get; set; }
        public string t { get; set; }
        public string k { get; set; }
        public string p { get; set; }
        public string e { get; set; }
        public string d { get; set; }
        public string v { get; set; }
        public string[] gi { get; set; }
        public string s { get; set; }
        public string mod { get; set; }
        public string total { get; set; }
    }
    

    【讨论】:

    • 这个 Dump() 方法是什么?它不是内置的。
    • 这是一个LinqPad thing。你可以改用Console.WriteLine()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2023-04-01
    • 2021-03-14
    相关资源
    最近更新 更多