2017-09-01 1 views
-1

Ich möchte Chrom Lesezeichen mit JSON-Objekt zu kratzen. Was ich tun möchte, ist alle Lesezeichen aus 1 Ordner zu bekommen. Das ist die Struktur der json:Holen Sie sich Chrom Lesezeichen von 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 
} 

In diesem Fall möchte ich Urls bekommen aus dem Ordner foo. Ich verwende Json.NET, um eine Zeichenfolge in ein Objekt zu konvertieren. Dieser Code:

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(); 
    } 

gibt mir eine Fehlermeldung: Cannot apply indexing with [] to an expression of type 'IEnumerable<JToken>'

Können Sie mir sagen, was ich falsch gemacht habe?

+0

Does https://stackoverflow.com/questions/21002297/getting-the-name-key-of-a-jtoken-with-json-net Hilfe ? – mjwills

Antwort

0

gibt es 1 Schleife fehlt:

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()); 
    } 
} 
Verwandte Themen