首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有名称属性的扁平JSON

没有名称属性的扁平JSON
EN

Stack Overflow用户
提问于 2018-05-16 11:12:03
回答 1查看 340关注 0票数 2
代码语言:javascript
复制
{
    "build": 44396,
    "files": ["00005DC8F14C92FFA13E7FDF1C9C35E4684F8B7A", [
        ["file1.zip", 462485959, 462485959, 2, 0, 883, true, 266716, 1734, 992, 558, 0],
        ["file1.doc", 521042, 521042, 2, 0, 883, true, 266716, 1734, 992, 558, 0]
    ], "0001194B90612DFB5E8D363249719FB62E221430", [
        ["file2.iso", 501163544, 501163544, 2, 0, 956, true, 194777, 2573, 0, 0, 0]
    ], "0002B5245B0897BEA7D7F426E104B6D24FF368DE", [
        ["file3.mp4", 284564707, 284564707, 2, 0, 543, true, 205165, 1387, 853, 480, 0]
    ]]
}

我想把上面的json压平成ID,fileName,fileSize IE

代码语言:javascript
复制
00005DC8F14C92FFA13E7FDF1C9C35E4684F8B7A    file1.zip   462485959
00005DC8F14C92FFA13E7FDF1C9C35E4684F8B7A    file1.doc   521042
0001194B90612DFB5E8D363249719FB62E221430    file2.iso   501163544
0002B5245B0897BEA7D7F426E104B6D24FF368DE    file3.mp4   284564707

正如您所看到的,大多数属性都没有名称。文件数组还将id替换为file对象。

我尝试使用类,但得到了错误:“不能反序列化当前的JSON数组{”不能反序列化当前的JSON数组(例如,1,2,3)为类型'Rename.frmMain+jsonFiles‘,因为类型需要一个JSON对象(例如,{\"name\":\"value\"})才能正确反序列化。要修复此错误,要么将JSON更改为JSON对象(例如{\"name\":\"value\"}),要么将反序列化类型更改为数组,或者将实现集合接口(例如ICollection、IList)的类型改为可以从JSON数组反序列化的列表。JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。\r\nPath‘file’,第1行,位置25“} Newtonsoft.Json.JsonSerializationException。

代码语言:javascript
复制
public class jsonDetails
{
  public int build { get; set; }
  public object files { get; set; }
}

public class jsonFiles
{
  public string hash { get; set; }
  public string[][] files { get; set; }
}

我尝试过使用ExpandoObjects而没有运气。

我看过linq到JSon。

我在网上看到的大多数例子都需要属性名。

我们如何将上述JSON扁平化?

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-16 11:35:00

您可以使用“无模式”直接使用JObject,然后使用一些LINQ来解决问题:

代码语言:javascript
复制
var jsonStr = @"{
    ""build"": 44396,
    ""files"": [""00005DC8F14C92FFA13E7FDF1C9C35E4684F8B7A"", [

        [""file1.zip"", 462485959, 462485959, 2, 0, 883, true, 266716, 1734, 992, 558, 0],
        [""file1.doc"", 521042, 521042, 2, 0, 883, true, 266716, 1734, 992, 558, 0]
    ], ""0001194B90612DFB5E8D363249719FB62E221430"", [

        [""file2.iso"", 501163544, 501163544, 2, 0, 956, true, 194777, 2573, 0, 0, 0]
    ], ""0002B5245B0897BEA7D7F426E104B6D24FF368DE"", [

        [""file3.mp4"", 284564707, 284564707, 2, 0, 543, true, 205165, 1387, 853, 480, 0]
    ]]
}";

var json = JObject.Parse(jsonStr);
var filesArr = json["files"];
var result = filesArr
    .Select((a, i) => new { a, i })
    .GroupBy(x => x.i / 2)
    .Select(g => g.ToList())
    .Select(g => new { id = g[0].a, vals = g[1].a })
    .SelectMany(x => x.vals.Select(v => new { x.id, val = v }))
    .Select(x => new { id = x.id.Value<string>(), 
                       filename = x.val[0].Value<string>(), 
                       size = x.val[1].Value<long>() });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50369362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档