【发布时间】:2020-06-04 00:05:39
【问题描述】:
我正在尝试解析一个 json 文件,但这有点难。我正在使用 Visual Studio 2019。
我需要从文件中获取一些数据。
这是我需要提取的 Json 文件数据:
{
"Id": "92cb6271-005e-48e9-a319-a606b8b6e1ef",
"DefaultPosition": {
"PositionId": "35ed169a-1208-4d8a-8faa-d2627d5790ed",
"EntityDetails": {
"DateCreated": "2019-09-17T15:25:52.4942161-03:00",
"DateModified": "2019-09-17T15:45:28.896274-03:00",
"CreatedBy": {
"Id": "1abb5047-8580-4be1-909d-41138035e4c9",
"ItemDisplayText": "Laurete Araujo",
"ItemType": "Users"
},
"ModifiedBy": {
"Id": "1abb5047-8580-4be1-909d-41138035e4c9",
"ItemDisplayText": "Laurete Araujo",
"ItemType": "Users"
},
"Owner": {
"Id": "1abb5047-8580-4be1-909d-41138035e4c9",
"ItemDisplayText": "Laurete Araujo",
"ItemType": "Users"
}
},
"NameComponents": {
"FullName": "ABRAHÃO DOS SANTOS",
"FamilyName": "SANTOS",
"FirstName": "ABRAHÃO DOS"
},
"MaritalStatus": {
"Id": "97d7a9dd-a7c4-4076-829c-7ec63b0e3fe7",
"DisplayTitle": "Marital Status",
"ItemDisplayText": "Married",
"ItemType": "LookupListEntries"
}
}
这是我尝试使用的 C# 代码,但它给我带来了问题:
public void JsonParser(string file)
{
string fullname;
string gender;
string nationality;
string maritalstatus;
var json = System.IO.File.ReadAllText(file);
var objects = Newtonsoft.Json.Linq.JArray.Parse(json); // parse as array
foreach (JObject root in objects)
{
foreach (KeyValuePair<String, JToken> app in root)
{
var appName = app.Key;
fullname = (String)app.Value["FullName"];
if (app.Key == "Gender")
{
gender = (String)app.Value["ItemDisplayText"];
Console.WriteLine(gender);
}
Console.WriteLine(fullname);
Console.WriteLine("\n");
}
}
}
当我运行代码并尝试从我要提取数据的位置导入文件时,出现以下错误:
Newtonsoft.Json.JsonReaderException: '从 JsonReader 读取 JArray 时出错。当前 JsonReader 项不是数组:StartObject。路径'',第 1 行,位置 1。'
谢谢!
【问题讨论】:
-
根据jsonlint.com,您发布的
JSON字符串无效。请发布正确的JSON字符串 -
您可能会发现反序列化 JSON 然后将所需数据作为常见的普通对象属性访问更简单。在这里对过去的问题进行 30 分钟的适当研究将为您提供此类任务的大部分基础知识。
-
@RahulSharma,对不起,我刚刚剪掉了一段代码。 JSON 文件具有有效的 JSON。对不起
-
@Shoy 如果您无法发布整个
JSON字符串,则粘贴一个有效字符串块。 -
从我看到的 json 不是一个数组。请发布 json 和/或解析为对象。