所以我一直在努力将像这个[20,8,25,5,34,12]
这样的字符列表转换成一个刚出的列表。我现在正在这样做
方式:
string fromJson = File.ReadAllText(Application.dataPath + "/JsonSaveTest.json");
List<int> temp = GetNumbers(fromJson).Select(c => int.Parse(c)).ToList();
然后
private List<string> GetNumbers(string input)
{
List<char> temp = input.Where(c => char.IsDigit(c)).ToList();
var toReturn = temp.Select(c => c.ToString()).ToList();
return toReturn;
}
但是它自己将每个数字分开,比如结果列表应该是20 8 25 5 34 12,它实际上就像2 0 8 2 5 5 3 4 1 2。
答案 0 :(得分:4)
如果字符串是您指定的格式(例如“[20,8,25,5,34,12]”),您只需使用Newtonsoft.Json包中的JsonConvert:
var result = JsonConvert.DeserializeObject<List<int>>("[20,8,25,5,34,12]");
这假设您需要一个整数列表,如问题中所述。如果您想要一个数字字符串列表,请使用
var result = JsonConvert.DeserializeObject<List<string>>("[20,8,25,5,34,12]");
代替
答案 1 :(得分:1)
鉴于您的样本清单:
"[20,8,25,5,34,12]"
最简单的方法是在删除括号后将string
分开,然后使用array
功能从string.Split()
转换ToList()
。
private List<string> GetNumbers(string input)
{
string x = input.Replace("[", string.Empty).Replace("]",string.Empty);
return x.Split(',').ToList();
}
注意:与JSON相关的答案是&#34;正确的&#34;办法。这更快速和肮脏&#34;任何字符串列表都会做&#34;方式。
答案 2 :(得分:0)
您正在使用
选择每个角色List<char> temp = input.Where(c => char.IsDigit(c)).ToList();
您应该使用数组中的逗号分隔数字,如下所示:
List<string> temp = input.Trim(new []{ '[', ']' }).Split(new []{ ',' }).ToList();
因此,删除括号,在逗号处拆分数组,这将为您提供单独的JSON数组元素。
请注意,使用库进行所有JSON解析可能是值得的,这是您应该考虑的事项。
答案 3 :(得分:0)
以下分割字符串,然后解析整数:
var input = "[20,8,25,5,34,12]";
public static int[] ParseNumbersList(string input) {
const char valueSeperator = ',';
var removeBrackets = input.Substring(1, input.Length-2);
var parts = removeBrackets.Split(valueSeperator);
return parts.Select(p => int.Parse(p)).ToArray();
}