[英]In c# how to split json objects into smaller objects and store in a string array
我必须以 json 格式发送数据,但它们必须是小尺寸的。 我得到数据(str)如下
[{"CombinationCode":127,"Pattern":"4545,.86,4520,.44,4592"},{"CombinationCode":128,"Pattern":"4545,.86,4520,.44,4592"},{"CombinationCode":129,"Pattern":"4545,.86,4520,.44,4592"}]
如果我希望最大大小为 165,我想将数据分块为小于 165(maxLength) 的部分,并且应该包含整个 json 元组。 像上面应该分开为2个字符串数组
[{"CombinationCode":127,"Pattern":"4545,.86,4520,.44,4592"},{"CombinationCode":128,"Pattern":"4545,.86,4520,.44,4592"}]
和
[{"CombinationCode":129,"Pattern":"4545,.86,4520,.44,4592"}]
我将如何做到这一点。 我尝试了以下代码,但它仅根据大小而不是元组将其分开
for (int index = 0; index < str.Length; index += maxLength) {
Console.WriteLine("DataPart {0}",str.Substring(index, Math.Min(maxLength, str.Length - index)));
}
任何帮助将不胜感激。
一种方法是将 JSON 反序列化为列表并一一发送:
List<DataToBeSent> items = JsonConvert.DeserializeObject<List<DataToBeSent>>(json);
foreach (var item in items)
{
SendItemOverNetwork(JsonConvert.SerializeObject(item));
}
public class DataToBeSent
{
public int CombinationCode { get; set; }
public string Pattern { get; set; }
}
为什么要重新发明使用 Json 库解析 JSON 的方式。
看看: https : //www.newtonsoft.com/json
然后,像这样的事情。
var items = JsonConvert.DeserializeObject<List<Dictionary<string, string>>(jsonString);
foreach(var dict in items)
{
var jsonChunk = JsonConvert.SerializeObject(dict);
}
以下代码进行了大量分配,但正是您想要的
var input =
"[{\"CombinationCode\":127,\"Pattern\":\"4545,.86,4520,.44,4592\"},{\"CombinationCode\":128,\"Pattern\":\"4545,.86,4520,.44,4592\"},{\"CombinationCode\":129,\"Pattern\":\"4545,.86,4520,.44,4592\"}]";
var arr = JsonConvert.DeserializeObject<List<JToken>>(input);
const int emptyArraySquareBracesCount = 2;
const int charsBetweenElements = 1;
var maxSize = 165;
var buffer = new JArray();
var bufferLength = emptyArraySquareBracesCount;
var elementsInChunk = 0;
foreach (var element in arr)
{
var part = element.ToString(Formatting.None);
if (bufferLength + part.Length > maxSize)
{
Console.WriteLine(buffer.ToString(Formatting.None));
buffer = new JArray();
elementsInChunk = 1;
bufferLength = emptyArraySquareBracesCount + part.Length;
buffer.Add(element);
}
else
{
elementsInChunk++;
bufferLength += charsBetweenElements + part.Length;
buffer.Add(element);
}
}
Console.WriteLine(buffer.ToString(Formatting.None));
我的方法是:
var parts = JArray.Parse(json).Select(x => x.ToString(Formatting.None)).ToList();
现在,您可以对每个部分做任何想做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.