【发布时间】:2019-09-25 12:57:59
【问题描述】:
"_embedded": {
"cscaia:status_report": {
"_links": {
"self": {
"title": "status_report",
"name": "status_report",
"href": "https://api.dxc-dev-aia.hub-1.dev.us.insurance.dxc.com/quotes/ID-mrMxY1Dg/status_report"
},
"type": {
"href": "https://diaas-dev.gtaia-test-domain.net/std-dev-lux-13100/insurance/schemas/quotes/statusReportDocument"
},
"up": {
"href": "https://api.dxc-dev-aia.hub-1.dev.us.insurance.dxc.com/quotes/ID-mrMxY1Dg"
}
},
"consistent": false,
"messages": [
{
"message": "Incomplete attribute",
"context": [
{
"propertyNames": [
"quote$distributor_id"
]
}
],
"severity": "error",
"code": "incomplete_attr"
}
]
}
}
在这里我需要找出键“严重性”的值,但我不知道它的级别。我没有它的父级的键以及它嵌套在其中的键,因为 json 将始终是动态的。
我尝试过使用扩展方法。但是对于嵌套键,我没有得到结果。
public static TType JsonValue<TType>(this JObject obj, string key)
{
object result = null; //default to null if nothing is found
foreach (var item in obj)
{
var token = item;
if (token.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase))
{
result = token.Value.ToObject<TType>(); //return the value found
break;
}
if (!obj[token.Key].Children().Any())
continue;
var jt = obj[token.Key].ToString();
if (!jt.StartsWith("["))
{
result = JsonValue<TType>(JObject.Parse(jt), key);
}
else
{
obj[token.Key].Children().ToList().ForEach(x =>
{
//only the first match will be returned
result = JsonValue<TType>(JObject.Parse(x.ToString()), key);
});
}
if (result != null)
break;
}
return (TType)result;
}
【问题讨论】:
-
你要做的是在 JS 或 C# 中都是相反的
-
我在 c# 中试过,但如果你能在 js 中给出解决方案也很好。@user7417866
标签: javascript c# json linq