【问题标题】:Combining 2 JSON sources from different URLs结合来自不同 URL 的 2 个 JSON 源
【发布时间】:2013-07-16 11:40:24
【问题描述】:

我有两个来自两个不同 URL 的 JSON 文件:

url1:

    {"2013" : [
        { "date":"2/5/2013 11:13 AM","height":3 }],
    "2012" : [
        { "date":"28/9/2012 3:34 PM","height":4 }]
    }

url2:

    {"2013" : [
        { "date":"2013-01-09 12:00:00","height":0 },
        { "date":"2013-01-29 12:00:00","height":2 }],
    "2012" : [
        { "date":"2012-02-09 12:00:00","height":0 },
        { "date":"2012-02-29 12:00:00","height":2 }],
    "2011" : [
        { "date":"2011-03-09 12:00:00","height":3 },
        { "date":"2011-03-29 12:00:00","height":2 }]
    }

我想要发生的是将它们组合成这些:

    {"2013" : [
        { "date":"2013-05-02 11:13:00","height":3 },
        { "date":"2013-01-29 12:00:00","height":2 },
        { "date":"2013-01-09 12:00:00","height":0 }],
    "2012" : [
        { "date":"2012-09-28 15:34:00","height":2 },
        { "date":"2012-02-29 12:00:00","height":2 },
        { "date":"2012-02-09 12:00:00","height":0 }],
    "2011" : [
        { "date":"2011-03-29 12:00:00","height":2 },
        { "date":"2011-03-19 12:00:00","height":8 },
        { "date":"2011-03-09 12:00:00","height":3 }]
    }

目前,我正在尝试做的是两个单独的 WebClient 下载,然后尝试将它们合并(不成功)。后来我意识到,做两个单独的 WebClient 下载,一个可能在我尝试合并它们之前还没有完成,导致一个空引用。

    WebClient Url1 = new WebClient();
    Url1.DownloadStringCompleted += new      
        DownloadStringCompletedEventHandler(Url1_DownloadStringCompleted);
    Url1.DownloadStringAsync(new Uri("http://example.com"));
    WebClient Url2 = new WebClient();
    Url2.DownloadStringCompleted += new 
        DownloadStringCompletedEventHandler(Url2_DownloadStringCompleted);
    Url2.DownloadStringAsync(new Uri("http://anotherexample.com"));

    void Url1_DownloadStringCompleted(object sender,
        DownloadStringCompletedEventArgs e)
    {
    if (e.Error != null) return;
    json1 = JObject.Parse(e.Result);
    }

    void Url2_DownloadStringCompleted(object sender,
        DownloadStringCompletedEventArgs e)
    {
    if (e.Error != null) return;
    json2 = JObject.Parse(e.Result);
    }

到目前为止,我读到的是做一个队列,然后合并它。但是,我不确定这是否有意义,因为由于括号不匹配,它会使组合文件成为无效的 JSON 文件。此外,由于格式不同,我在解析日期方面会遇到问题。

关于我应该走什么流程有什么建议吗?

【问题讨论】:

  • 如果您将点击同步,然后将对象转换为您在 C# 中拥有的类型, Dictionary 其中 Year 有一个 List (命名更好),其中 info 是一个类日期和年份。然后你可以编写一个算法来组合这两个集合,然后再转换回 JSON。

标签: c# json windows-phone json.net


【解决方案1】:

正如@cgatian 所说,您应该创建新类:

public class Item
{
    public DateTime Date { get; set; }
    public int Height { get; set; }
}

然后:

    var dictionary1 = JsonConvert.DeserializeObject<Dictionary<int, Item[]>>(jsonFromUrl1);
    var dictionary2 = JsonConvert.DeserializeObject<Dictionary<int, Item[]>>(jsonFromUrl2);

    var mergedDictionary = dictionary1
        .Concat(dictionary2)
        .GroupBy(x => x.Key, y => y.Value)
        .ToDictionary(
            group => group.Key,
            group => group.SelectMany(x => x).ToArray());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2020-09-25
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多