Luiey Ichigo Ответов: 1

Разделить несколько JSON-данные в JSON формат файла, как объекта, так и в виде массива


Привет,

Как получить данные из JSON-файла, содержащего несколько строк данных? В настоящее время то, что я пытаюсь сделать, можно описать в разделе "Что я пробовал"


Ниже приведены примерные данные:-
[{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "c",
	"Timestamp": "2016-12-8T13:54:12+08:00",
	"Duration": "0.000086712"
},
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "3",
	"Timestamp": "2016-12-8T13:54:12+08:00",
	"Duration": "0.0"
},
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "a",
	"Timestamp": "2016-12-8T13:54:11+08:00",
	"Duration": "0.000100080"
},
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "5",
	"Timestamp": "2016-12-8T13:54:10+08:00",
	"Duration": "0.0"
}]


Когда я вхожу в datajson, я могу просмотреть свойства внутри объекта и увидеть все образцы данных. Но в настоящее время данные разделены правильно "Count = 4", но когда я шагаю внутрь count = 4, я вижу еще одно свойство данных 5. Что я хочу, так это получить каждый массив json с лямбда-разделением на разрыв. В результате в datajson array count он имеет значение ниже без десериализации в каждую переменную:
[0] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "c","Timestamp": "2016-12-8T13:54:12+08:00","Duration": "0.000086712"}
[1] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "3","Timestamp": "2016-12-8T13:54:12+08:00","Duration": "0.0"}
[2] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "a","Timestamp": "2016-12-8T13:54:11+08:00","Duration": "0.000100080"}
[3] {"DataType": "Spectre_DT","HostName": "spectrum","Listener": "5","Timestamp": "2016-12-8T13:54:10+08:00","Duration": "0.0"}


Исходные данные представлены в следующем формате:-
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "c",
	"Timestamp": "2016-12-8T13:54:12+08:00",
	"Duration": "0.000086712"
}
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "3",
	"Timestamp": "2016-12-8T13:54:12+08:00",
	"Duration": "0.0"
}
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "a",
	"Timestamp": "2016-12-8T13:54:11+08:00",
	"Duration": "0.000100080"
}
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "5",
	"Timestamp": "2016-12-8T13:54:10+08:00",
	"Duration": "0.0"
}


Таким образом, код, который я использую для десериализации объекта, превращается в ошибку:-
Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'jsonreader.SpectrumData[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'DataType', line 1, position 12.


Если я Десериализуюсь в динамический объект без использования библиотеки классов, то возникнет эта ошибка:-
dynamic vx = Newtonsoft.Json.JsonConvert.DeserializeObject(strjson);

Additional text encountered after finished reading JSON content: {. Path '', line 2, position 0.


Что я уже пробовал:

public class SpectrumData
{
    public string DataType { get; set; }
    public string HostName { get; set; }
    public string Listener { get; set; }
    public string Timestamp { get; set; }
    public double Duration { get; set; }
}
class Program
{

static void Main(string[] args)
{
    try
    {
        var strjson = File.ReadAllText(jsonfile[i].ToString());
        SpectrumData[] datajson = JsonConvert.DeserializeObject<SpectrumData[]>(strjson);
    }
        catch
    { }
}
}

1 Ответов

Рейтинг:
5

Luiey Ichigo

Я чувствую себя так плохо, когда каждый раз, когда я пишу вопрос, который я искал довольно много раз, я нашел путь для своих собственных вопросов.

Чтобы прочитать исходный формат, предоставленный клиентом:-

{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "c",
	"Timestamp": "2016-12-8T13:54:12+08:00",
	"Duration": "0.000086712"
}
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "3",
	"Timestamp": "2016-12-8T13:54:12+08:00",
	"Duration": "0.0"
}
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "a",
	"Timestamp": "2016-12-8T13:54:11+08:00",
	"Duration": "0.000100080"
}
{
	"DataType": "Spectre_DT",
	"HostName": "spectrum",
	"Listener": "5",
	"Timestamp": "2016-12-8T13:54:10+08:00",
	"Duration": "0.0"
}

Это можно сделать с помощью этого:-
string[] jsonFileContent = File.ReadAllLines(jsonfile[i].ToString());
foreach (string value in jsonFileContent)
{
    Console.WriteLine(value);
}


Я нашел этот ответ в здесь[^] .