当 JSON 包装器中存在 JSON 有效负载时,将字符串美化为 JSON



我有一个由JSON包装器组成的JSON字符串,在这个包装器中是JSON有效负载。

我需要美化字符串,使其更具可读性。

我尝试使用一些常规的美化器(Newtonsoft,加上我在SO上找到的一个不错的美化器(,但是由于这个JSON字符串提供给我的方式,它们不起作用

这是我的 JSON 字符串

{ "本地参考编号": "DNXLHR1906000000000005", "申报状态": "已提交", "有效负载": "{\"声明类型\":空,\"接受日期Utc\":空,\"声明Ucr\":\"9GB949032610000-AI-000000031-ASH\",\"本地参考编号":\"DNXLHR1906000000000005\",\"交易者参考":\"AI-000000031-ASH\",\"导出器\":{\"标识号":空,\"名称":空,\"街道":空,\"城市":空,"邮政编码":空,\"国家":空},\"进口商":{\"标识号":空,\"名称":空,\"街道":空,\"城市":空,\"邮政编码":空,\"国家\":空},\"卖家\":{\"标识号":空,\"名称":空,\"街道":空,\"城市":空,\"邮政编码":空,\"国家":空},\"买家":{\"标识号":空,\"名称":空,\"街道":空,\"城市":空,\"邮政编码":空,\"国家\":空},\"声明人":{\"标识号":\"GB949032610000",\"名称":\"ASM (UK( LTD\",\"STREET\":"阿什福德之家",\"城市":"阿什福德",\"邮政编码":\"TW15 2TQ\",\"国家\":\"GB\"},\"代表\":{\"标识号":空,\"名称":空,\"街道":空,\"城市":空,\"邮政编码":空,\"国家\":空},\"表示":0,\"运输类型到达时":空,\"运输身份到达":空,\"边境运输模式":4,"运输国家在边境":空,\"内陆运输模式":空,\"总包裹":空,\"调度国家":空,\"目的地国家":空,"发票货币":空,"发票总计":空,"交货条款":null,\"ExchangeRate\":null,\"NatureOfTransaction\":null,\"GoodsLocation\":{\"CountryCode\":null,\"Type\":null,\"Quantifier\":null,\"Identification\":null,\"Name\":null},\"FirstDeferr\":null,\"SecondDeferr\":null,\"WarehouseIdentity\":null,\"WarehouseType\":null,\"SupervisingOffice\":null,\"AirportOfLoad\":null,\"MovementReferenceNumber":null,\"AuthorisationHolders":[],\"Containers\":[],\"Guarantees\":[],\"ExtraalFiscalReferences\":[],\"ExtraalSupplyChainActor\":[],\"PreviousDocuments\":[{\"Category\":\"Z\",\"Type\":\"DCR\",\"Reference\":\"9GB949032610000-AI-000000031-ASH\",\"标识符\":null,\"Order\":1}],\"Items\":[{\"ItemNumber":1,\"DeclarationUcr\":null,\"TraderReference\":null,\"原产国":null,\"PreferentialCountryOfOrigin":null,\"Ppreferences\":null,\"Quota\":null,\"GoodsDescription\":\"DSAFASDFSA\",\"ItemPrice\":null,\"ItemCurrency\":null,\"StatisticalValue\":null,\"StatisticalValueCurrency\":null,\"NetMass\":null,\"GrossMass\":null,\"SupplementaryUnits\":null,\"ValuationMethod\":null,\"ValuationIndicators\":null,\"DispatchCountry":null,\"DestinationCountry\":null,\"NatureOfTransaction\":null,\"Exporter\":{\"IdentificationNumber\":null,\"Name\":null,\"Street\":null,\"City\":null,\"邮政编码":null,\"国家\":null},\"卖家":{\"标识号":空,\"名称":空,\"街道":null,\"City\":null,\"邮政编码":null,\"国家\":null},\"买家":{\"标识号":空,\"名称":空,\"街道":空,"城市":空,"邮政编码":空,"国家\":空},\"海关联盟和统计编号":空,"商品代码":空,"程序代码":空,\"商品附加代码":[],\"附加程序代码":[],\"以前的文件":[],\"容器":[],\"包裹":[],\"财政参考":[],\"供应链参与者":[],\"供应链参与者":[],\"AdditionsAndDeducions\":[],\"AdditionalInformation\":[],\"DocumentCertificateAuthorisationReferences\":[],\"TaxLines\":[]}],\"OtherAdditionsAndDeducions\":[]}", "提交者": "开发构建者", "提交": "2019-06-14T09:08:42.788Z" }

如您所见,有一个"有效负载"部分,其中包含"JSON 包装器"中的 JSON 数据,我需要格式化整个字符串,使其看起来像格式化的 JSON 数据,即适当的缩进等。

最终从字符串中删除了有效负载:

string payloadPropertyName = ""Payload":"";
int startIndex = rawMessage.IndexOf(payloadPropertyName, StringComparison.Ordinal) + payloadPropertyName.Length;
int endIndex = rawMessage.IndexOf("","SubmittingBy"", StringComparison.Ordinal);
string payload = rawMessage.Substring(startIndex, endIndex - startIndex);
payload = payload.Replace("\"", """);
return Newtonsoft.Json.Linq.JToken.Parse(payload).ToString(Newtonsoft.Json.Formatting.Indented);

和美化:Newtonsoft.Json.Linq.JToken.Parse(payload).ToString(Newtonsoft.Json.Formatting.Indented);

然后我使用 JsonDeserialize 将我的包装器 JSON 数据反序列化为一个对象

jsonSerializer.JsonDeserialize<Wrapper>(rawMessage);

internal class Wrapper
{
public string LocalReferenceNumber { get; set; }
public string DeclarationStatus { get; set; }
public string SubmittingBy { get; set; }
public DateTime SubmittedOn { get; set; }
}

最后,我只是格式化了包装器数据:

本地参考编号:DNXLHR1906000000000005

申报状态:已提交

提交者: 开发构建者

提交于: "2019-06-14 09:08:42

其次是我美化的 JSON 有效负载

有点解决方法,但在我的情况下效果很好。

最新更新