查找方括号之间的字符串
本文关键字:字符串 之间 方括号 查找 | 更新日期: 2023-09-27 17:59:32
我有一个字符串,看起来像这样:
{
"acl_gent": {
"cluster": [],
"indices": [{
"names": ["am*"],
"privileges": ["read", "view_index_metadata"],
"query": "{'"match'": {'"ACL'": '"acl_gent'"}}"
}],
"run_as": []
},
"acl_luik": {
"cluster": [],
"indices": [{
"names": ["am*"],
"privileges": ["read", "view_index_metadata"],
"query": "{'"match'": {'"ACL'": '"acl_luik'"}}"
}],
"run_as": []
}
}
我想把它分成两个字符串,一个包含acl_gent,另一个包含acl_luik
上面的字符串可以包含2个以上的acl(我不知道名称)
所以我开始移除第一个和最后一个括号:
input = input.Substring(1, input.Length - 2);
但我不知道如何找到正确的右括号来提取数据。
这是我最接近的一次
private int closer(string input) {
var i = input.IndexOf('}');
Console.WriteLine(string.Format("[DEBUG] Checking: {0}", input.Substring(0, i).Contains('{')));
if (input.Substring(0, i).Contains('{')) {
return i + closer(input.Substring(i)) + 2;
}
return i;
}
您所拥有的是一个JSON字符串,一个来自web服务的常见响应,并且有很多库可以解析JSON,最常见的是JSON.NET
JObject myJsonObject = JObject.Parse(myResponse)
并通过它们的密钥名称(如)检索字符串
JObject aclString = myJsonObject["acl_luik"];
如果您想了解更多详细信息,在线有大量资源可用于解析JSON字符串。
这里有两个选项:
1) 解析为JSON并获得前2个对象,这是更好的一个。
2) 使用Stack作为令牌字符串进行分析,以获得您想要的内容,如下所示:-删除第一个和最后一个{}-使用堆栈,添加您找到的所有{,一旦找到},就删除堆栈中的第一个{。-一旦堆栈为空,那么您就可以在那里获得1个完整的对象,在工作时保存indeces,并且应该可以很容易地用start和end进行子字符串。
我最近遇到了同样的问题。我的解决方案是将字符串反序列化为json对象(在我的例子中是使用json.net的JObject),然后访问各个成员并将它们序列化为单独的字符串。
using Newtonsoft.Json.Linq;
public void MakeStrings(string json)
{
var jobject = JsonConvert.DeserializeObject<JObject>(json);
string acl_gent = JsonConvert.SerializeObject(jobject["acl_gent"]);
string acl_luik = JsonConvert.SerializeObject(jobject["acl_luik"]);
}