我的C#模型中有一个字符串,上面填充了这个字符串:
“[{\” TA_ID \ “:97497,\” PARTNER_ID \ “:\” 229547 \” \ “partner_url \”:\ “http://partner.com/deeplink/to/229547 \”},{\ “TA_ID \”: 97832,\ “PARTNER_ID \”:\ “id34234 \”,\ “partner_url \”:\ “http://partner.com/deeplink/to/id34234 \”}]“
有没有办法,使用LINQ或RegEx,我可以解析出partner_id的 - 所以我最终得到了一个列表对象:
229547
id34234
感谢您的帮助,Mark
答案 0 :(得分:2)
假设您的链接始终具有合作伙伴ID -
string Name = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";
string[] splittedString = Regex.Split(Name, "}");
List<string> allIds = new List<string>();
foreach (var i in splittedString)
{
var ids =Regex.Split(i, "/");
string id = ids[ids.Length - 1];
allIds.Add(id);
}
答案 1 :(得分:2)
我从未使用任何JSON解析器,但如果涉及Regex,你可以尝试这样的事情:
private static void regexString()
{
string myString = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";
string[] stringList = Regex.Split(myString, "},{");
for (int i=0; i<stringList.Length ;i++)
{
stringList[i] = Regex.Split(Regex.Split(stringList[i], "partner_id\\\":\\\"")[1], "\\\",\\\"partner_url\\\"")[0];
}
}
此外,有一个很好的网站可以帮助您将来创建自己的正则表达式模式,请查看:
一个很好的简短教程:
答案 2 :(得分:2)
如果这是字符串的一般格式,则此正则表达式应该起作用
(?i)(?<=(partner_id).{5})\w+
测试here
这将从您的字符串中获取
229547 and id34234
(?i)
=案例无效
(?<=(partner_id).{5})
= postive lookbehind ,然后在这种情况下为\":\"
\w+
=一次或多次任何字母数字字符
希望这有帮助
答案 3 :(得分:0)
由于这是JSON,您可能不应该费心去尝试使用正则表达式。相反,您可以解析JSON然后使用LINQ。
using System.Web.Script.Serialization; // (in System.Web.Extensions.dll)
...
string s = "[{\"ta_id\":97497,\"partner_id\":\"229547\",\"partner_url\":\"http://partner.com/deeplink/to/229547\"},{\"ta_id\":97832,\"partner_id\":\"id34234\",\"partner_url\":\"http://partner.com/deeplink/to/id34234\"}]";
JavaScriptSerializer j = new JavaScriptSerializer();
object[] objects = (object[])j.DeserializeObject(s);
string[] ids = objects.Cast<Dictionary<string, object>>()
.Select(dict => (string)dict["partner_id"])
.ToArray();
将它反序列化为对象有点麻烦,因为你没有任何类型信息。如果你不想让一个小班去反序列化,你可以这样做:
class Foo
{
public string partner_id
{
get;
set;
}
}
...
JavaScriptSerializer j = new JavaScriptSerializer();
string[] ids = j.Deserialize<Foo[]>(s).Select(x => x.partner_id).ToArray();
请注意,还有其他用于反序列化JSON的选项。我只选择了内置的最通用的。