How do I parse this JSON data in C# and would it be more benefical to simply switch over to javascript?

0

I'm looking to parse this JSON and I've had nothing but problems. The link to the JSON is here. I'm trying to access the "href" field. While writing this up, I realized that that the data field is actually an array so that is part of my problem.

class Program
   {
       static void Main(string[] args)
       {
        var json = System.IO.File.ReadAllText(@"C:\Users\...\file.json");
        Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(json);
        var x = myDeserializedClass.result.extractorData.data;
        Console.Write(x.ToString());
    }

    public class Newcolumn
    {
        public string text { get; set; }
        public string xpath { get; set; }
        public string href { get; set; }
        public string filepath { get; set; }
        public string fileMimeType { get; set; }
        public int fileTotalBytes { get; set; }
        public string fileLastModifiedTime { get; set; }
    }

    public class Group
    {
        public List<Newcolumn> Newcolumn { get; set; }
    }

    public class Datum
    {
        public List<Group> group { get; set; }
    }

    public class ExtractorData
    {
        public string url { get; set; }
        public List<Datum> data { get; set; }
    }

    public class PageData
    {
        public int statusCode { get; set; }
        public long timestamp { get; set; }
    }

    public class Inputs
    {
        public string _url { get; set; }
    }

    public class Result
    {
        public ExtractorData extractorData { get; set; }
        public PageData pageData { get; set; }
        public Inputs inputs { get; set; }
        public string taskId { get; set; }
        public long timestamp { get; set; }
        public int sequenceNumber { get; set; }
    }

    public class Root
    {
        public string url { get; set; }
        public Result result { get; set; }
    }

}

This ends up returning: System.Collections.Generic.List`1[ConsoleApp3.Datum]

I notice that the field name data actually turns into an array though I'm not sure how to structure that. data.[0].new Column.[0].group.etc... does not work obviously. The space in the "new Column" field is also problematic. Additionally, when I debug and look at the JSON viewer, the "new column field is null. I also tried this code:

public static void Main()
{

    var json = System.IO.File.ReadAllText(@"C:\Users\...\file.json");
    dynamic stuff = JsonConvert.DeserializeObject(json);
    var a = stuff.result.extractorData.data; 
    string b = a.ToString();
    Console.WriteLine(b);         
    Console.WriteLine("Press any key to exit.");
    System.Console.ReadKey();
}

This actually does return the data field object however, if I do stuff.result.extractorData.data.group; I get this:

 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
  HResult=0x80131500
  Message='Newtonsoft.Json.Linq.JArray' does not contain a definition for 'group'
  Source=<Cannot evaluate the exception source>
  StackTrace:
<Cannot evaluate the exception stack trace>

I assume that this is probably because of the array contained within the data field, regardless the "new Column' field is also an issue with this method due to the space.

c#
json
parsing
import.io
asked on Stack Overflow Aug 21, 2020 by Mav

1 Answer

0

in your above code

 public class ExtractorData
 {
     public string url { get; set; }
     public List<Datum> data { get; set; }
 }

where data is List and you are trying to access as string

 Console.Write(x.ToString());

in data variable Datum is List ( where your variable have multiple Data) and in every element there is a List. (Nestest List Concept Applied in This JSON)

Try to Add Break Point on below Line and check the line by line Excution of Code.

var a = stuff.result.extractorData.data;

After Looking Your JSON File Image Try This Code

Console.Write(a.FirstOrDefault()?.group.FirstOrDefault()?.Newcolumn.FirstOrDefault()?.href);
answered on Stack Overflow Aug 21, 2020 by Muhammad Usama Alam • edited Aug 21, 2020 by Muhammad Usama Alam

User contributions licensed under CC BY-SA 3.0