From 9cc489ecfd1f11b1172392d3a1a9fa500bb38638 Mon Sep 17 00:00:00 2001 From: walon Date: Mon, 15 Nov 2021 22:27:49 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=89=B9=E6=80=A7=E3=80=91json?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E6=94=AF=E6=8C=81=E4=BB=8Ejson?= =?UTF-8?q?=E5=AD=90=E5=AD=97=E6=AE=B5=E8=AF=BB=E5=85=A5bean=E6=88=96?= =?UTF-8?q?=E8=80=85list,bean=EF=BC=8C=E6=94=AF=E6=8C=81=E7=94=A8*@xxx.jso?= =?UTF-8?q?n=E5=BD=A2=E5=BC=8F=E5=B0=86json=E5=BD=93=E4=BD=9C=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E8=AE=B0=E5=BD=95=E5=88=97=E8=A1=A8=E8=AF=BB=E5=85=A5?= =?UTF-8?q?list,bean=E5=BD=A2=E5=BC=8F=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/DataSources/Json/JsonDataSource.cs | 35 ++++++++++++++++--- .../Source/Utils/DataLoaderUtil.cs | 12 ++++++- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs b/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs index 70ceaf7..096ab21 100644 --- a/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs +++ b/src/Luban.Job.Cfg/Source/DataSources/Json/JsonDataSource.cs @@ -12,23 +12,43 @@ namespace Luban.Job.Cfg.DataSources.Json { class JsonDataSource : AbstractDataSource { - JsonElement _data; + private JsonElement _data; public override void Load(string rawUrl, string sheetName, Stream stream) { RawUrl = rawUrl; this._data = JsonDocument.Parse(stream).RootElement; + + if (!string.IsNullOrEmpty(sheetName)) + { + if (sheetName.StartsWith("*")) + { + sheetName = sheetName.Substring(1); + } + if (!string.IsNullOrEmpty(sheetName)) + { + foreach (var subField in sheetName.Split('.')) + { + _data = _data.GetProperty(subField); + } + } + } } public override List ReadMulti(TBean type) { - throw new NotImplementedException(); + var records = new List(); + foreach (var ele in _data.EnumerateArray()) + { + records.Add(ReadBean(ele, type)); + } + return records; } - public override Record ReadOne(TBean type) + private Record ReadBean(JsonElement ele, TBean type) { List tags; - if (_data.TryGetProperty(TAG_KEY, out var tagEle)) + if (ele.TryGetProperty(TAG_KEY, out var tagEle)) { var tagName = tagEle.GetString(); if (DataUtil.IsIgnoreTag(tagName)) @@ -42,8 +62,13 @@ namespace Luban.Job.Cfg.DataSources.Json tags = null; } - var data = (DBean)type.Apply(JsonDataCreator.Ins, _data, (DefAssembly)type.Bean.AssemblyBase); + var data = (DBean)type.Apply(JsonDataCreator.Ins, ele, (DefAssembly)type.Bean.AssemblyBase); return new Record(data, RawUrl, tags); } + + public override Record ReadOne(TBean type) + { + return ReadBean(_data, type); + } } } diff --git a/src/Luban.Job.Cfg/Source/Utils/DataLoaderUtil.cs b/src/Luban.Job.Cfg/Source/Utils/DataLoaderUtil.cs index 4820579..059b9dc 100644 --- a/src/Luban.Job.Cfg/Source/Utils/DataLoaderUtil.cs +++ b/src/Luban.Job.Cfg/Source/Utils/DataLoaderUtil.cs @@ -64,6 +64,16 @@ namespace Luban.Job.Cfg.Utils return allFiles; } + public static bool IsMultiRecordField(string sheet) + { + return !string.IsNullOrEmpty(sheet) && sheet.StartsWith("*"); + } + + private static bool IsMultiRecordFile(string file, string sheetOrFieldName) + { + return FileUtil.IsExcelFile(file) || IsMultiRecordField(sheetOrFieldName); + } + public static async Task GenerateLoadRecordFromFileTasksAsync(IAgent agent, DefTable table, string dataDir, List inputFiles2, List>> tasks) { var inputFileInfos = await CollectInputFilesAsync(agent, inputFiles2, dataDir); @@ -86,7 +96,7 @@ namespace Luban.Job.Cfg.Utils file.OriginFile, file.SheetName, await agent.GetFromCacheOrReadAllBytesAsync(file.ActualFile, file.MD5), - FileUtil.IsExcelFile(file.ActualFile)); + IsMultiRecordFile(file.ActualFile, file.SheetName)); FileRecordCacheManager.Ins.AddCacheLoadedRecords(table, file.MD5, file.SheetName, res);