如何从可能无效的 JSON 字符串中提取内部对象?
How can I extract an inner object from a potentially invalid JSON string?
我从 API
那里得到了这个回复
{\r\n \"VAL_VER_ZERO_TURN\" : {\r\n \"J_ID\" : \"345\",\r\n \"DIS_CODE\" : \"WV345\"\r\n }\r\n}
我收到此字符串作为 webClient.DownloadString(uri) 的响应
但是当把它转换成JSON时,结果是空白。
JsonConvert.PopulateObject(响应,rockInfo);
当我尝试使用硬编码字符串(而不是 webClient.DownloadString(uri))时,它起作用了
response = {\"J_ID\" : \"345\",\r\n \"DIS_CODE\" : \"WV345\"\r\n }";
我在这里理解的是当我向它提供带有前导和尾随换行符的实习生 JSON 对象时它的工作原理。
但我不知道如何提取内部 JSON 对象。
我建议将 Json 转换为 Class (json2csharp) 并使用 JsonConvert.PopulateObject 来读取内部对象.下面是示例代码。
public class VALVERZEROTURN
{
public string J_ID { get; set; }
public string DIS_CODE { get; set; }
}
public class RootObject
{
public VALVERZEROTURN VAL_VER_ZERO_TURN { get; set; }
}
static void Main(string[] args)
{
string response = "{\r\n \"VAL_VER_ZERO_TURN\" : {\r\n \"J_ID\" : \"345\",\r\n \"DIS_CODE\" : \"WV345\"\r\n }\r\n}";
RootObject rockInfo = new RootObject();
JsonConvert.PopulateObject(response, rockInfo);
Console.WriteLine($"J_ID: {rockInfo.VAL_VER_ZERO_TURN.J_ID}, DIS_CODE: {rockInfo.VAL_VER_ZERO_TURN.DIS_CODE} ");
}
您可以使用 JObject.Parse(response)
访问不同的对象,就好像您正在遍历字典一样。
var jobject = JObject.Parse(response);
var abc = jobject["VAL_VER_ZERO_TURN"];
您可以继续深入了解每个结果。
我从 API
那里得到了这个回复{\r\n \"VAL_VER_ZERO_TURN\" : {\r\n \"J_ID\" : \"345\",\r\n \"DIS_CODE\" : \"WV345\"\r\n }\r\n}
我收到此字符串作为 webClient.DownloadString(uri) 的响应 但是当把它转换成JSON时,结果是空白。
JsonConvert.PopulateObject(响应,rockInfo);
当我尝试使用硬编码字符串(而不是 webClient.DownloadString(uri))时,它起作用了
response = {\"J_ID\" : \"345\",\r\n \"DIS_CODE\" : \"WV345\"\r\n }";
我在这里理解的是当我向它提供带有前导和尾随换行符的实习生 JSON 对象时它的工作原理。 但我不知道如何提取内部 JSON 对象。
我建议将 Json 转换为 Class (json2csharp) 并使用 JsonConvert.PopulateObject 来读取内部对象.下面是示例代码。
public class VALVERZEROTURN
{
public string J_ID { get; set; }
public string DIS_CODE { get; set; }
}
public class RootObject
{
public VALVERZEROTURN VAL_VER_ZERO_TURN { get; set; }
}
static void Main(string[] args)
{
string response = "{\r\n \"VAL_VER_ZERO_TURN\" : {\r\n \"J_ID\" : \"345\",\r\n \"DIS_CODE\" : \"WV345\"\r\n }\r\n}";
RootObject rockInfo = new RootObject();
JsonConvert.PopulateObject(response, rockInfo);
Console.WriteLine($"J_ID: {rockInfo.VAL_VER_ZERO_TURN.J_ID}, DIS_CODE: {rockInfo.VAL_VER_ZERO_TURN.DIS_CODE} ");
}
您可以使用 JObject.Parse(response)
访问不同的对象,就好像您正在遍历字典一样。
var jobject = JObject.Parse(response);
var abc = jobject["VAL_VER_ZERO_TURN"];
您可以继续深入了解每个结果。