如何解析第一个属性,即使Json无效



我正在解析大量不同的json,这些json只有第一个公共属性。根据第一个属性的值,我将json解析为不同的对象,并以不同的方式处理可能的错误。然而,json是无效的,但我仍然想知道第一个属性的值(只要它是有效的),这样我就可以处理解析错误。我想知道Json.Net是否可以做到这一点。当然,我假设至少第一个属性是有效的,例如:

{
   "parsingType":"sometype",
   "someothervalue":123,
   "someval"123,
}

我尝试了以下操作,但由于在使用.Parse时引发了异常,我没有得到任何结果:

JToken jtoken = JToken.Parse(json);
var theValueIWantToGet = jtoken["parsingType"].Value<string>();

我认为任何解析引擎都不会部分解析json。如果解析器失败,您将不得不自己解析json字符串

        string json = "{ "parsingType":"sometype", "someothervalue":12}";
        var props = json.Replace('{',' ').Replace('}',' ').Split(',').ToList();
        if (props.Count > 0)
        {
            var firstProp = props[0].Split(':');
            var propName = firstProp[0];
            var propVal = firstProp[1];
        }

您可以使用JsonReader(可能是JsonTextReader作为具体类型)将JSON解析为流,有点像XmlReader。例如:

using System;
using System.IO;
using Newtonsoft.Json;
public class Test
{
    static void Main(string[] args)
    {
        using (var reader = new JsonTextReader(File.OpenText("test.json")))
        {            
            while (reader.Read())
            {
                Console.WriteLine(reader.TokenType);                
                Console.WriteLine(reader.Value);
            }
        }
    }
}

在您提供的JSON上,将给出以下输出:

StartObject
PropertyName
parsingType
String
sometype
PropertyName
someothervalue
Integer
123
Unhandled Exception: Newtonsoft.Json.JsonReaderException [...]

因此,如果你总是期望有一个开始对象,然后是一个属性名称,然后是字符串属性值,你可以很容易地验证这一点,并提取属性值。

相关内容

  • 没有找到相关文章

最新更新