正则表达式 C#:清除错误的 Json 字符串

Regular Expressions C#: Clean bad Json string

我从服务器得到这样的回答 JSON:

var zohozoho_atliview92 = {\"Itinerary\":[
 {\"Client_Email\":\"garymc\",
 \"Client_Name\":\"Gary\",
 \"NT_Number\":\"NT-1237\",\"Number_of_Nights\":7,
 \"ID\":\"24297940\",
 \"Itinerary_Name\":\"Icelandnights\",
 \"Tour_Template_Name\":\"Iceland FireDrive\",
 \"Departure_Date\":\"2018-07-04\"}
]};

我需要删除这个:var zohozoho_atliview92 = {\"Itinerary\":[ 并删除最后 3 个字符 ]}; 以在我的对象中反序列化它。

如何使用正则表达式来实现?或者有更好的变体吗?

这不是 JSON,它是 Javascript(对象声明是 JSON)。

正则表达式很慢,我建议你使用 Substring

var start=inputString.IndexOf("[");
var end=("]");
var json=inputString.Substring(start, end-start);

可能会有一些错误,请测试并更正。 硬编码启动会更快但更弱。

is there a better variant?

是的,您可以将 json 转义字符串解析为 JObject

然后您可以使用 Querying JSON with LINQ

从 json 访问任何 key/value 对

或者您可以使用 var result = jObject.ToObject<T>();

JObject 映射到您的自定义类型
class Program
{
    static void Main(string[] args)
    {
        var zohozoho_atliview92 = "{\"Itinerary\":[ {\"Client_Email\":\"garymc\", \"Client_Name\":\"Gary\", \"NT_Number\":\"NT-1237\",\"Number_of_Nights\":7, \"ID\":\"24297940\", \"Itinerary_Name\":\"Icelandnights\", \"Tour_Template_Name\":\"Iceland FireDrive\", \"Departure_Date\":\"2018-07-04\"}]}";

        JObject jObject = JObject.Parse(zohozoho_atliview92);

        Console.WriteLine(jObject);

        Console.ReadLine();
    }
}

输出: