拆分 JSON 数组中的值
Splitting of values in a JSON array
我的 json ["[\"~:bbl:P5085\",\"~:cosco:NoTag\"]"]
进来了
options.Type1.Values()
我试图只保留 bbl 附带的值,所以从上面我想保留 P5085 并删除所有值,这里可以有多个 bbl 值,我需要保留所有值。我尝试了下面的代码,但它不起作用。分裂给了我
P5085","~:cosco
我不明白我在下面的代码中做错了什么。有人可以在这里提供修复吗?
private void InitializePayload(JsonTranslatorOptions options)
{
_payload.Add("ubsub:attributes", _attributes);
_payload.Add("ubsub:relations", _relations);
JArray newType = new JArray();
foreach (JValue elem in options.Type1.Values())
{
if (elem.ToString().Contains("rdl"))
{
string val = elem.ToString().Split(":")[1];
newType.Add(val);
}
}
_payload.Add("ubsub:type", newType);
}
正如我在评论中解释的那样,这不是 JSON,除了在顶层是一个具有单个字符串值的数组。 specific 字符串本身可以解析为 JSON 数组,但它的值不能以任何方式作为 JSON 处理。它们只是字符串。
虽然您可以尝试解析和拆分该字符串,但找到该格式的实际规范并为其编写解析器会 很多 更安全。或者为 API.
找一个图书馆
您可以使用以下代码进行解析,但它很慢,可读性差,并且基于很容易破坏的假设 - 如果值包含冒号会怎样?
foreach(var longString in JArray.Parse(input))
{
foreach(var smallString in JArray.Parse(longString))
{
var values=smallString.Split(":");
if(values[1]=="bbl")
{
return values[2];
}
}
}
return null;
您可以将其转换为 LINQ,但这同样难以阅读:
var value=JArray.Parse(input)
.SelectMany(longString=>JArray.Parse(longString))
.Select(smallString=>smallString.Split(":"))
.Where(values=>values[1]=="bbl")
.Select(values=>values[2])
.FirstOrDefault();
试试这个:
var input = "['[\"~:bbl:P5085\",\"~:cosco:NoTag\"]']";
var BBLs_List = JArray.Parse(input)
.SelectMany(m => JArray.Parse(m.ToString()))
.Select(s => s.ToString().Split(":"))
.Where(w => w[1] == "bbl")
.Select(s => s[2])
.ToList();
我的 json ["[\"~:bbl:P5085\",\"~:cosco:NoTag\"]"]
进来了
options.Type1.Values()
我试图只保留 bbl 附带的值,所以从上面我想保留 P5085 并删除所有值,这里可以有多个 bbl 值,我需要保留所有值。我尝试了下面的代码,但它不起作用。分裂给了我
P5085","~:cosco
我不明白我在下面的代码中做错了什么。有人可以在这里提供修复吗?
private void InitializePayload(JsonTranslatorOptions options)
{
_payload.Add("ubsub:attributes", _attributes);
_payload.Add("ubsub:relations", _relations);
JArray newType = new JArray();
foreach (JValue elem in options.Type1.Values())
{
if (elem.ToString().Contains("rdl"))
{
string val = elem.ToString().Split(":")[1];
newType.Add(val);
}
}
_payload.Add("ubsub:type", newType);
}
正如我在评论中解释的那样,这不是 JSON,除了在顶层是一个具有单个字符串值的数组。 specific 字符串本身可以解析为 JSON 数组,但它的值不能以任何方式作为 JSON 处理。它们只是字符串。
虽然您可以尝试解析和拆分该字符串,但找到该格式的实际规范并为其编写解析器会 很多 更安全。或者为 API.
找一个图书馆您可以使用以下代码进行解析,但它很慢,可读性差,并且基于很容易破坏的假设 - 如果值包含冒号会怎样?
foreach(var longString in JArray.Parse(input))
{
foreach(var smallString in JArray.Parse(longString))
{
var values=smallString.Split(":");
if(values[1]=="bbl")
{
return values[2];
}
}
}
return null;
您可以将其转换为 LINQ,但这同样难以阅读:
var value=JArray.Parse(input)
.SelectMany(longString=>JArray.Parse(longString))
.Select(smallString=>smallString.Split(":"))
.Where(values=>values[1]=="bbl")
.Select(values=>values[2])
.FirstOrDefault();
试试这个:
var input = "['[\"~:bbl:P5085\",\"~:cosco:NoTag\"]']";
var BBLs_List = JArray.Parse(input)
.SelectMany(m => JArray.Parse(m.ToString()))
.Select(s => s.ToString().Split(":"))
.Where(w => w[1] == "bbl")
.Select(s => s[2])
.ToList();