簡體   English   中英

C#嘗試拆分字符串以獲取json對象值

[英]C# Trying to split a string to get json object value

我正在嘗試拆分字符串以獲取json對象值-我的文本值包含以下格式的許多行:

new Car() { Id = 1, Year = 1926, Make = "Chrysler", Model = "Imperial", ImageUrl = "{"data":{"images":[{"thumb_url":"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRPe4CygIW-MuZL5jl77wlgXXK5_ANyC9l1X4QqLizCOkaVAlRe","image_url":"http://imperialclub.org/Yr/1926/photos/Phaeton2Big.jpg","width":1632,"height":1032}]},"error_code":0,"error":false,"message":"1 images(s) available"}" },
new Car() { Id = 2, Year = 1950, Make = "Hillman", Model = "Minx Magnificent", ImageUrl = "{"data":{"images":[{"thumb_url":"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcScVsGEeRBh6xZYXr6Gm35Sk5ecSlk_ax3qZmoGRAtBbZC8vJZ9","image_url":"http://i.ebayimg.com/images/g/gcIAAOSwKadXPeLs/s-l300.jpg","width":300,"height":225}]},"error_code":0,"error":false,"message":"1 images(s) available"}" },
new Car() { Id = 3, Year = 1954, Make = "Chevrolet", Model = "Corvette", ImageUrl = "{"data":{"images":[{"thumb_url":"https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSdZntu4tgWrZrxwqeuKlteCP9vJGnqUlmNq5JF1bBCf-EJy5r8","image_url":"http://momentcar.com/images/chevrolet-corvette-1954-1.jpg","width":1000,"height":600}]},"error_code":0,"error":false,"message":"1 images(s) available"}" },

我真正想要的是采用以下格式:

new Car() { Id = 1, Year = 1926, Make = "Chrysler", Model = "Imperial", ImageUrl = "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRPe4CygIW-MuZL5jl77wlgXXK5_ANyC9l1X4QqLizCOkaVAlRe" },
new Car() { Id = 2, Year = 1950, Make = "Hillman", Model = "Minx Magnificent", ImageUrl = "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcScVsGEeRBh6xZYXr6Gm35Sk5ecSlk_ax3qZmoGRAtBbZC8vJZ9" },
new Car() { Id = 3, Year = 1954, Make = "Chevrolet", Model = "Corvette", ImageUrl = "https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSdZntu4tgWrZrxwqeuKlteCP9vJGnqUlmNq5JF1bBCf-EJy5r8" },

我知道我可以使用JObject.Parse(data); 解析json值-但是嘗試去獲取它正變成一場噩夢。 有更好的方法嗎?

到目前為止,我有:

static void Main(string[] args)
    {

        using (StreamWriter writer = new StreamWriter(@"c:\Data\temp\output.txt")) // file to write to
        {
            using (StreamReader reader = new StreamReader(@"c:\Data\temp\test.txt")) //file to read from
            {
                string line;

                while (reader.ReadLine() != null)
                {
                    line = reader.ReadLine();

                    string[] words = JsonSplitString(line);

                    string json = words[1];

                    writer.WriteLine("{0}", json);
                }
            }
        }

    }

    static string[] JsonSplitString(string data)
    {
        return data.Split(new string[] { "ImageUrl" }, StringSplitOptions.None);
    }

但是,我正在收到NullReferenceException即使將字符串傳遞給JsonSplitString方法。

您兩次調用reader.Readline() :一次用於比較,然后再次在循環內。 實際上,您正在跳過其他所有行。 而且可能發生的情況是,您到達文件的末尾,然后再次調用reader.Readline() ,該參數為null。 嘗試以下方法:

line = reader.ReadLine();
while (line != null)
{
    string[] words = JsonSplitString(line);
    string json = words[1];
    writer.WriteLine("{0}", json);
    line = reader.ReadLine();
}
using System;
using Newtonsoft.Json.Linq;

namespace JsonExperiments
{
    class Program
    {
        static void Main(string[] args)
        {
            ExecuteEmployeeSearch();
            Console.ReadLine();
        }

    static void ExecuteEmployeeSearch()
    {
        // mockup JSON that would be returned from API
        string sampleJson = "{\"results\":[" +
            "{\"employeename\":\"name1\",\"employeesupervisor\":\"supervisor1\"}," +
            "{\"employeename\":\"name2\",\"employeesupervisor\":\"supervisor1\"}," +
            "{\"employeename\":\"name3\",\"employeesupervisor\":[\"supervisor1\",\"supervisor2\"]}" +
            "]}";

        // Parse JSON into dynamic object, convenient!
        JObject results = JObject.Parse(sampleJson);

        // Process each employee
        foreach (var result in results["results"])
        {
            // this can be a string or null
            string employeeName = (string)result["employeename"];

            // this can be a string or array, how can we tell which it is
            JToken supervisor = result["employeesupervisor"];

            string supervisorName = "";
            if (supervisor is JValue)
            {
                supervisorName = (string)supervisor;
            }
            else if (supervisor is JArray)
            {
                // can pick one, or flatten array to a string
                supervisorName = (string)((JArray)supervisor).First;
            }

            Console.WriteLine("Employee: {0}, Supervisor: {1}", employeeName, supervisorName);
        }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM