簡體   English   中英

檢查 JSON 屬性是否包含值或數組

[英]Check whether JSON property contains value or array

我有一個隨機輸入 XML 文件,我試圖將其轉換為 JSON 並訪問值。 現在 JSON 可能有一個簡單的 JSON object 或者它可能有數組。 當我使用簡單的 JSON object 時,我能夠正確獲取值,但是當任何 JSON 屬性包含數組時,我收到“值不能為空”的錯誤。 我為此使用 newtonsoft 庫。 我的問題是,每次輸入文件可能具有不同的結構時,如何知道 JSON 中的屬性是否具有值或數組。 我希望我能夠解釋我的問題,我正在使用的代碼如下:

            XmlDocument Xmldoc = new XmlDocument();
            Xmldoc.LoadXml(fileContents);
            string root = Xmldoc.DocumentElement.Name;
            var json = JsonConvert.SerializeXmlNode(Xmldoc);
            var JsonStringObject = (JObject)JsonConvert.DeserializeObject(json);
            var XMLNodesData = JsonStringObject[root.ToString()].Children();
            List<JToken> tokens = XMLNodesData.Children().Children().ToList();
            
            foreach (var node in tokens)
            {
                foreach (Field field in fields)
                {
                    
                    var inputString = node[field.FieldName].Value<string>();
                }
            }

使用上面的代碼,如果我有一個簡單的 XML,我可以在inputString上正確獲取值,例如:

<PatientRecords>
    <Patient>       
        <firstname>John</firstname>
        <lastname>Smith</lastname>      
        <patientid>111</patientid>
        <dob>2022-05-13</dob>
    </Patient>
    <Patient>
        <firstname>Martha</firstname>
        <lastname>Stewart</lastname>        
        <patientid>112</patientid>
        <dob>2022-04-14</dob>
    </Patient>
</PatientRecords>

但是如果我將 XML 更改為以下給定格式,那么我會收到錯誤“值不能為空”的年齡屬性:

<PatientRecords>
    <Patient>       
        <firstname>John</firstname>
        <lastname>Smith</lastname>      
        <patientid>111</patientid>
        <age>
            <dob>2022-05-13</dob>
        </age>
    </Patient>
    <Patient>
        <firstname>Martha</firstname>
        <lastname>Stewart</lastname>        
        <patientid>112</patientid>
        <age>
            <dob>2022-04-14</dob>
        </age>
    </Patient>
</PatientRecords>

注意:field.Fieldname 用於從我的項目中需要的不同 XML 獲取標簽名稱(“名字”、“姓氏”等)。 請對此提供幫助,並在此先感謝您。

你可以試試下面

var jsonResult = JsonConvert.DeserializeObject<dynamic>(jsonStr);
            
            if(jsonResult.Type==JTokenType.Object)
            {
                //JSON contains Object
            }
            else if(jsonResult.Type==JTokenType.Array)
            {
                //JSON contains Array 
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM