假设我有一个string
表示JSON格式的对象数组:
string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";
我想要的是一个字符串数组,每个字符串是JSON对象的字符串表示 - NOT 对象本身。看起来应该是这样的:
string[] s = new string[]
{
"{\"name\":\"Person1\"}",
"{\"name\":\"Person2\"}"
};
1)几乎我尝试的每一次搜索都会产生数百万条关于如何使用(例如)Json.NET简单地反序列化JSON字符串的结果。这不我想做什么。
2)我尝试构建一个表示对象的类,以暂时循环遍历反序列化/序列化映射,每个映射到数组中的字符串,但对象的模式是可变的(因此我只需要一个字符串表示)。
3)我尝试了一些正则表达式来尝试这样做,但是我的JSON字符串可以包含包含JSON字符串作为其值的字段(icky,但不在我的控制范围内),因此嵌套字符转义等会让我部分疯狂在我决定在这里寻求帮助之前。
当然这应该很简单?有人有指点吗?
答案 0 :(得分:3)
您需要对其进行反序列化,然后单独序列化每个对象。
例如(使用Newtonsoft.Json
):
string json = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";
var objects = JsonConvert.DeserializeObject<List<object>>(json);
var result = objects.Select(obj => JsonConvert.SerializeObject(obj)).ToArray();
收益率(作为string[]
):
{"name":"Person1"}
{"name":"Person2"}
如果你试图避免反序列化和序列化,你几乎肯定会遇到会破坏你的代码的边缘情况。
答案 1 :(得分:1)
string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";
var Json = JsonConvert.DeserializeObject<List<object>>(s);
string[] Jsonn = Json.Select(x => x.ToString()).ToArray();
[] Jsonn
返回字符串数组,而不是使用JObject格式化的对象数组。
希望这个能帮到你。
答案 2 :(得分:-4)
你为什么不用这个
string s = "[{\"name\":\"Person1\"},{\"name\":\"Person2\"}]";
string[] t = s.Split(',');
我试了一下。它只是给你你想要的字符串数组....