如何最容易地将带字符串的JSON转换为带有数组的JSON?

问题描述 投票:2回答:2

我需要编写一个名为public string PrepareForDeserialization(string json)的方法,它可以像这样转换一个JSON字符串:

{"To":"[email protected], [email protected], [email protected]","CC":"[email protected]","BCC":""}

到这样的JSON字符串:

{"To":["[email protected]", "[email protected]", "[email protected]"],"CC":["[email protected]"],"BCC":[]}

在我开始使用Substring()Regex.Replace()解决这个问题之前,我是否可以使用某种更简单的JSON字符串到数组转换器,或者将带有字符串的序列化JSON字符串转换为序列化JSON的最简单方法数组的字符串?

c# arrays json
2个回答
3
投票

你应该使用一些JSON库(例如Json.net)。当手动操作JSON字符串时,这将解决许多陷阱,您可能会错过。

var o1 = JsonConvert.Deserialize<JObject>(jsonstring);

//you can split by ' ' and ',' because email addresses won't contain any whitespaces. For other purposes you may need better splitting rules.
var to = o1.Value<string>("To").Split(new char[]{' ', ',"}, StringSplitOptions.RemoveEmptyEntries);
var cc = o1.Value<string>("CC").Split(new char[]{' ', ',"}, StringSplitOptions.RemoveEmptyEntries);
var bcc = o1.Value<string>("BCC").Split(new char[]{' ', ',"}, StringSplitOptions.RemoveEmptyEntries);
var outstring = JsonConvert.SerializeObject(new JObject{
   {"To", JArray.FromObject(to)},
   {"CC", JArray.FromObject(cc)},
   {"BCC", JArray.FromObject(bcc)},
});

请注意,没有错误处理。例如,如果原始字符串错过了三个列表中的一个,则会抛出。


0
投票

使用Newtonsoft.Json

string strJson = @"{'To':'name @company.com, name2 @company.com, name3 @company.com','CC':'namecc @company.com','BCC':''}";
                dynamic jsonObject = JsonConvert.DeserializeObject(strJson);
                Dictionary<string, string[]> val = new Dictionary<string, string[]>();
                foreach (var prop in jsonObject)
                {
                    string name = prop.Name;
                    string[] datas = Convert.ToString(prop.Value).Split(',');
                    val.Add(name, datas);
                }

                string op = JsonConvert.SerializeObject(val);
© www.soinside.com 2019 - 2024. All rights reserved.