C# 以某种方式将Json.NET Jarray格式化为字符串
我有下面的代码,它在一个raw_coords JSON.NET JArray对象中循环C# 以某种方式将Json.NET Jarray格式化为字符串,c#,arrays,string,C#,Arrays,String,我有下面的代码,它在一个raw_coords JSON.NET JArray对象中循环 List<string> coords_final = new List<string>(); foreach (var item in raw_coords.Children()) { var itemcount = item.Count(); for (int i = 0; i < itemcount; i++) //loop through rows
List<string> coords_final = new List<string>();
foreach (var item in raw_coords.Children())
{
var itemcount = item.Count();
for (int i = 0; i < itemcount; i++) //loop through rows
{
var coord_temp1 = item[i].ToString();
coord_temp1 = coord_temp1.Trim(new Char[] { ' ', ',', '.' });
coord_temp1 = coord_temp1.Trim(new Char[] { ' ', '[', '.' });
coord_temp1 = coord_temp1.Trim(new Char[] { ' ', ']', '.' });
coord_temp1 = coord_temp1.Replace(',', ' ');
coords_final.Add(coord_temp1);
}
}
在上面的数据中,coords\u final
确实变成了一个包含两个元素的数组。但是我需要的是一个字符串变量,它的数据格式为:
(-9221176.0729 4120407.4526000023, -9221176.0427 4120407.6987999976), (..)..
我上面的代码改编自另一个C#程序,但当前生成的数据如下:
-9221176.0729 4120407.4526000023, -9221176.0427 4120407.6987999976, -9221176.1341 4120407.4602999985,
这不是我需要的
那么,如何使数据成为所需的格式——如上所示?我试着预先加上“(“和附加”)”,但没用。假设
原始坐标是你的Jarray
List<string> myCoordsList = new List<string>();
foreach(JToken item in raw_coords)
{
List<string> listOfPairs = new List<string>();
var result = item.ToObject<JArray>();
foreach (JToken jToken in result)
{
var jarray = (JArray) jToken;
IEnumerable<string> nums = jarray.Values<string>();
listOfPairs.Add(string.Join(" ", nums));
}
myCoordsList.Add(string.Format("({0})", string.Join(",", listOfPairs)));
}
string coordsString = string.Join(",", myCoordsList);
对于前几对坐标。以下解决方案给出了您想要的结果:
string json = @"[
[ -9221176.0728999991, 4120407.4526000023 ],
[ -9221176.0427000001, 4120407.6987999976 ]
]";
JArray raw_coords = JArray.Parse(json);
List<string> coords_final = new List<string>();
foreach (var item in raw_coords.Children())
{
coords_final.Add("("+String.Join<object>(",", item)+")");
}
string coords = String.Join(",",coords_final.ToArray());
Console.WriteLine (coords);
string json=@”[
[ -9221176.0728999991, 4120407.4526000023 ],
[ -9221176.0427000001, 4120407.6987999976 ]
]";
JArray raw_coords=JArray.Parse(json);
列表坐标_final=新列表();
foreach(raw_coords.Children()中的变量项)
{
coords_final.Add(“(”+String.Join(“,”,item)+”);
}
string coords=string.Join(“,”,coords_final.ToArray());
Console.WriteLine(coords);
(-9221176.07294120407.4526),(-9221176.042741204407.6988)附加和预附加参数应该可以正常工作。你能发布不起作用的代码并解释发生了什么事吗?嗯,代码被删除了——基本上,我在最后用了一个额外的逗号,但是,正如你所看到的,我的代码也试图删除一个逗号。这可能是一个更好的方法。不要构建字符串,而是构建一个字典,然后在字典上使用一个序列化程序来获取正确的json,而不需要字符串解析混乱。是的,但我非常接近:“item”变量当前正在填充coords_最终列表字符串。它需要做的是将所有项目变量的数据输入到coords_final的一个元素中,并附上(和)。我已经编辑了您的标题。请看“”,其中的共识是“不,他们不应该”。你的意思是反序列化原始坐标数组吗?哦。。。现在我明白了。。。项包含行。。。我会更新我的答案(反序列化项目[i]…)谢谢。让我再试一次。顺便说一句,我确实在上面的几行代码中反序列化了加载的JSON…不确定这是否会有任何影响。我认为您的代码不会像给定的那样工作:已经有包含您的代码的foreach:foreach(raw_coords.Children()中的var项)是的,正在发布整个JSON。。。它很大,所以我会给你一个链接谢谢!从未尝试过你的解决方案,但非常感谢你的帮助。
(-9221176.0729 4120407.4526),(-9221176.0427 4120407.6988),(-9221176.1341 4120407.4603),(-9221176.0729 4120407.4526),(-9221176.104 4120407.7063),(-9221176.1341 4120407.4603) ...
string json = @"[
[ -9221176.0728999991, 4120407.4526000023 ],
[ -9221176.0427000001, 4120407.6987999976 ]
]";
JArray raw_coords = JArray.Parse(json);
List<string> coords_final = new List<string>();
foreach (var item in raw_coords.Children())
{
coords_final.Add("("+String.Join<object>(",", item)+")");
}
string coords = String.Join(",",coords_final.ToArray());
Console.WriteLine (coords);