从 json 数组字符串中获取数据到字符串变量
Posted
技术标签:
【中文标题】从 json 数组字符串中获取数据到字符串变量【英文标题】:get data from json array string to an string variable 【发布时间】:2020-11-06 09:01:12 【问题描述】:我从另一个应用程序收到一个带有 JSON 有效负载的 HTTP 请求,如下所示:
"reportName": "myfile",
"type_1": "pdf",
"paramm": [
"REF": "value1",
"whatevervalue2": "whatevervalue2"
]
我收到数据并尝试处理它。我创建了一个类来从 JSON 中获取数据:
public class ReportId
public string reportName get; set;
public string type_1 get; set;
public object[] paramm get; set;
这是我在 API 控制器上处理所有数据的方法:
[HttpPost]
public IActionResult generate([FromBody] ReportId jsonResult)
try
var reportName = jsonResult.reportName;
var type = jsonResult.type_1;
var recParam = jsonResult.paramm;
//....
List<ReportParameter> parameters = new List<ReportParameter>();
foreach (var t in recParam)
string[] paramName;
paramName = t.ToString().Split(":");
parameters.Add(new ReportParameter()
Name = paramName[0],
Labels = new List<string>() paramName[1] ,
Values = new List<string>() paramName[1]
);
reportWriter.SetParameters(parameters);
//....
catch
return null;
我对@987654324@ 和type_1
没有任何问题,但在paramm
上它有点不稳定。我需要从 JSON 中获取该数组的值。我确实设法得到它们,但使用“所有格式”。例如,在第一个拆分后,我会得到:
"\r\n \"REF\""
" \"value1\"\r\n"
有没有更优雅的方法可以从 paramm
数组中获取值,而不必替换不属于“真实”字符串的字符?
提前致谢。
[编辑澄清] 在 JSON 上,我将获得多个参数:
"paramm": [
"parameter1": "value1" ,
"parameter2": "value2" ,
"parameter3": "value3"
]
参数名称可以是任何单词,值也可以是任何单词。这些参数被发送到 RDL 以过滤一些查询,因此我需要获取名称(参数 1、2、3...)及其值并将其作为参数添加到每个参数的迭代中。
【问题讨论】:
@itsme86 他们是......模型绑定确实使用 Json.Net 或 .Net 自己的 JSON 解析器......由于某些原因,他们不想将看起来像字典的东西声明为字典。 .. vvic - 请澄清您期望从该 JSON 中实现什么。对于外部观察者来说,它看起来就像普通字典......问题是你有重复的键(即使已经有很多问题)? 为澄清而编辑。谢谢 【参考方案1】:是的,有一个更简单的方法。
在您的ReportId
类中,将paramm
成员更改为List<Dictionary<string, string>>
而不是object[]
。
public class ReportId
...
public List<Dictionary<string, string>> paramm get; set;
然后,在您的 generate
方法中,您可以从每个字典中获取键和值,而无需进行字符串操作:
List<ReportParameter> parameters = new List<ReportParameter>();
foreach (var dict in recParam)
var kvp = dict.First();
parameters.Add(new ReportParameter()
Name = kvp.Key,
Labels = new List<string>() kvp.Value ,
Values = new List<string>() kvp.Value
);
【讨论】:
实际上就像一个魅力。非常感谢。 没问题;很高兴我能帮上忙。【参考方案2】:我猜,你的 ReportId 类应该是这样的。我希望这会奏效。
public partial class ReportId
[JsonProperty("reportName")]
public string ReportName get; set;
[JsonProperty("type_1")]
public string Type1 get; set;
[JsonProperty("paramm")]
public Paramm[] Paramm get; set;
public partial class Paramm
[JsonProperty("REF", NullValueHandling = NullValueHandling.Ignore)]
public string Ref get; set;
[JsonProperty("whatevervalue2", NullValueHandling = NullValueHandling.Ignore)]
public string Whatevervalue2 get; set;
【讨论】:
接近我所需要的。 Paramm 只是我需要接收的可变数量的参数(可以是 2、3 甚至没有)。它们将包含一个名称(示例中为“REF”,但可以是任何名称)和一个值。然后我需要迭代这些参数并将它们分配给parameters.Addvar ri = new ReportId(); ri.Paramms = new Paramm[10]; ri.Paramms[0]= new Paramm()Ref="asd",Whatevervalue2 = "asd";
your answer 也可以,但是您需要定义数组的大小,因此 List以上是关于从 json 数组字符串中获取数据到字符串变量的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:从包含json字符串的nvarchar(max)变量中获取所有字符串出现(标记)