我正在一个项目中,我想从JSON数组构建令牌。
<DatePicker className="turkish"
locale={tr}
placeholderText="Please select a date"
onChange={this.handleChangeDatePicker}
onChangeRaw={this.handleDateChangeRaw}
selected={bookTime.data }
showTimeSelect
minTime={setHours(setMinutes(new Date(), 0), 7)}
maxTime={setHours(setMinutes(new Date(), 0), 22)}
minDate={subDays(new Date(), 0)}
timeFormat="HH:mm"
timeIntervals={60}
dateFormat="HH:mm,d MMMM yyyy"
timeCaption="Saat"
/>
以上代码成功创建了令牌$ Fruits。 但我也想实现令牌$ Number和$ Name,其中每个令牌的值来自同一键的串联值。例如,如果我使用“ $ Number”,它将被替换为111、112、113;如果我使用了“ $ Name”,它将被替换为Apple,Orange,Peach。
此外,我不使用任何强类型模型,因为我不知道什么数据将被馈送到系统。
有帮助吗?
答案 0 :(得分:0)
为实现此目的,对代码进行了一些小的更改。首先让您的字典看起来像这样:
var customTokens = new Dictionary<string, List<string>>();
然后,当您遍历数组中的所有属性时,请检查是否已添加该属性,如果尚未添加,请检查。
foreach (JProperty prop in content.Properties())
{
if(customTokens.ContainsKey(prop.Name))
{
customTokens[prop.Name].Add(prop.Value.ToString());
}
else
{
customTokens.Add(prop.Name, new List<string> { prop.Value.ToString() });
}
}
最后,您有一本字典,其中的键是属性名称,值是List<string>
-可以串联在一起:
foreach(var item in customTokens)
{
Console.WriteLine(item.Key + ":" + String.Join(",", item.Value));
}
或者,如果您真的想要在串联字符串字典中使用它,只需
var finalResult = customTokens.ToDictionary(k => k.Key, v => String.Format(",",v.Value));
请注意,您需要在文件顶部添加using System.Linq
才能使用ToDictionary
最终测试代码:
var result = "{ \"Fruits\":[{\"Number\":\"111\", \"Name\":\"Apple\"}, {\"Number\":\"112\", \"Name\":\"Orange\"},{\"Number\":\"113\", \"Name\":\"Peach\"}]}";
Dictionary<string, dynamic> data = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(result);
var customTokens = new Dictionary<string, List<string>>();
foreach (var dataField in data)
{
if (dataField.Value is JArray)
{
foreach (JObject content in dataField.Value.Children<JObject>())
{
foreach (JProperty prop in content.Properties())
{
if(customTokens.ContainsKey(prop.Name))
{
customTokens[prop.Name].Add(prop.Value.ToString());
}
else
{
customTokens.Add(prop.Name, new List<string> { prop.Value.ToString() });
}
}
}
foreach(var item in customTokens)
{
Console.WriteLine(item.Key + ":" + String.Join(",", item.Value));
}
}
}