【问题标题】:Get chrome bookmarks from json从 json 获取 chrome 书签
【发布时间】:2017-09-01 22:19:07
【问题描述】:

我想使用 json 对象来抓取 chrome 书签。我想要做的是从 1 个文件夹中获取所有书签。那就是json的结构:

{
   "checksum": "d499848083c2c2e3a38f547da4cbad7c",
   "roots": {
      "bookmark_bar": {
         "children": [ {
            "children": [ {
               "url": "https://www.example.com/"
            }, {
               "url": "https://www.another-example.com/"
            } ],
            "name": "foo",
         } ],
         "name": "Menu bookmarks",
      },
      "other": {
         "name": "Another bookmarks",
      },
      "synced": {
         "name": "Phone bookmarks",
      }
   },
   "version": 1
}

在这种情况下,我想从文件夹 foo 中获取 url。我正在使用Json.NET 将字符串转换为对象。这段代码:

    string input = File.ReadAllText(bookmarksLocation);
    using (StringReader reader = new StringReader(input))
    using (JsonReader jsonReader = new JsonTextReader(reader)) {
        JsonSerializer serializer = new JsonSerializer();
        var o = (JToken)serializer.Deserialize(jsonReader);
        var allChildrens = o["roots"]["bookmark_bar"]["children"];

        var fooFolder = allChildrens.Where(x => x["name"].ToString() == "foo");

        foreach (var item in fooFolder["children"]) {
            Console.WriteLine(item["url"].ToString());
        }
        Console.ReadKey();
    }

给我一​​个错误: Cannot apply indexing with [] to an expression of type 'IEnumerable<JToken>'

你能告诉我我做错了什么吗?

【问题讨论】:

标签: c# json


【解决方案1】:

缺少 1 个循环:

var fooFolder = allChildrens.Where(x => x["name"].ToString() == "foo");
foreach (var folder in fooFolder)
{
    foreach (var item in folder["children"])
    {
        Console.WriteLine(item["url"].ToString());
    } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    相关资源
    最近更新 更多