【发布时间】:2021-12-31 01:00:57
【问题描述】:
我正在尝试从 Json 格式的输出中删除此标头 "vendor": 和 { } 分支。
删除的原因是将这三个字段名(“RECORDNO”..“NAME”)映射到SQL表中。
底部是预期的输出:
底部是 C# 代码,它遍历每个代码并填充结果,然后使用 JsonCovert 将输出格式化为 Json 格式。
public static string Run(ILogger logger)
{
OnlineClient client = Bootstrap.Client(logger);
ReadByQuery query = new ReadByQuery()
{
ObjectName = "VENDOR",
PageSize = 600,
Fields =
{
"RECORDNO",
"VENDORID",
"NAME"
}
};
logger.LogInformation("Executing query to Intacct API");
Task<OnlineResponse> task = client.Execute(query);
task.Wait();
OnlineResponse response = task.Result;
Result result = response.Results[0];
LogManager.Flush();
int i = 1;
while (result.NumRemaining > 0 && i <= 1 && !string.IsNullOrEmpty(result.ResultId))
{
i++;
ReadMore more = new ReadMore()
{
ResultId = result.ResultId
};
Task<OnlineResponse> taskMore = client.Execute(more);
taskMore.Wait();
OnlineResponse responseMore = taskMore.Result;
Result resultMore = responseMore.Results[0];
dynamic resultJson =
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));
string resultJsonString = resultJson.ToString();
return resultJsonString;
}
return "";
}
我不熟悉 C#,所以我不确定如何表达从“查询”中删除“供应商:”部分。
我确信这段 C# 代码中有很多不必要的行可以删除(清理)。
删除 "vendor": 和 { } 分支的表达式是什么?
这是根据@Serge 的评论更新的代码。
int i = 1;
while (result.NumRemaining > 0 && i <= 1 && !string.IsNullOrEmpty(result.ResultId))
{
i++;
dynamic resultJson =
JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));
string resultJsonString = resultJson.ToString();
var jsonArray = JArray.Parse(resultJsonString);
var newJsonArray = jsonArray.SelectTokens("$..VENDOR");
var result1 = JsonConvert.SerializeObject(newJsonArray, Newtonsoft.Json.Formatting.Indented);
return result1;
}
我这样修改的时候,没有数据输出(如下图)。
[ ]
放置底部代码的正确方法(区域)是什么?
var jsonArray=JArray.Parse(json);
var newJsonArray = jsonArray.SelectTokens("$..VENDOR");
var result= JsonConvert.SerializeObject(newJsonArray, Newtonsoft.Json.Formatting.Indented);
【问题讨论】:
-
您可以在 SQL 中非常轻松地做到这一点:只需使用
OPENJSON(@YourJson) WITH (RECORDNO int '$.vendor.RECORDNO', ... -
何必呢?只需按原样解析并从解析结果中获取您想要的信息