Najlepszą część dwóch dni spędziłem na „grzebaniu” w próbkach kodu itp., Próbując odczytać bardzo duży plik JSON w tablicy w języku c #, aby później móc go podzielić na tablicę 2D w celu przetworzenia.
Problem, który miałem, polegał na tym, że nie mogłem znaleźć przykładów ludzi wykonujących to, co próbowałem. Oznaczało to, że po prostu trochę edytowałem kod, mając nadzieję na najlepsze.
Udało mi się uzyskać coś, co:
- Odczyt pliku Brakuje nagłówków i odczytuje tylko wartości do tablicy.
- Umieść określoną liczbę wartości w każdym wierszu tablicy. (Więc mogłem później podzielić go na tablicę 2d)
Dokonano tego za pomocą poniższego kodu, ale powoduje on awarię programu po wprowadzeniu kilku wierszy do tablicy. Może to mieć związek z rozmiarem pliku.
// If the file extension was a jave file the following
// load method will be use else it will move on to the
// next else if statement
if (fileExtension == ".json")
{
int count = 0;
int count2 = 0;
int inOrOut = 0;
int nRecords=1;
JsonTextReader reader = new JsonTextReader(new StreamReader(txtLoaction.Text));
string[] rawData = new string[5];
while (reader.Read())
{
if (reader.Value != null)
if (inOrOut == 1)
{
if (count == 6)
{
nRecords++;
Array.Resize(ref rawData, nRecords);
//textBox1.Text += "\r\n";
count = 0;
}
rawData[count2] += reader.Value + ","; //+"\r\n"
inOrOut = 0;
count++;
if (count2 == 500)
{
MessageBox.Show(rawData[499]);
}
}
else
{
inOrOut = 1;
}
}
}
Fragment kodu JSON, z którym pracuję, to:
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
Potrzebuję wartości z tego JSON. Na przykład potrzebuję „3.54”, ale nie chcę, aby drukował „vcc”.
Mam nadzieję, że ktoś pokaże mi, jak odczytać plik JSON i wyodrębnić tylko potrzebne dane i umieścić je w tablicy lub coś, czego mogę użyć do późniejszego umieszczenia w tablicy.
źródło
Odpowiedzi:
Co powiesz na ułatwienie korzystania z Json.NET ?
Możesz nawet uzyskać wartości
dynamic
sojusznika bez deklarowaniaItem
klasy.źródło
json
. Musi to być zawartość twojego pliku.StreamReader
tak masz , lepiej byłoby dokonać deserializacji bezpośrednio ze strumienia za pomocą,JsonTextReader
jak pokazano w Czy Json.NET może serializować / deserializować do / ze strumienia? . Tor.ReadToEnd()
nie jest potrzebne.Robienie tego samemu jest okropnym pomysłem. Użyj Json.NET . To rozwiązało problem lepiej niż większość programistów, gdyby mieli całe miesiące pracy nad nim. Jeśli chodzi o twoje specyficzne potrzeby, parsowanie w tablice i tym podobne, sprawdź dokumentację , szczególnie na
JsonTextReader
. Zasadniczo Json.NET obsługuje natywnie tablice JSON i parsuje je na ciągi, inty lub cokolwiek innego, co się dzieje bez pytania od ciebie. Oto bezpośredni link do podstawowych zastosowań kodu zarówno dla czytnika, jak i pisarza, dzięki czemu możesz mieć to otwarte w wolnym oknie podczas nauki z tym pracować.To jest najlepsze: tym razem bądź leniwy i skorzystaj z biblioteki, aby na zawsze rozwiązać ten powszechny problem .
źródło
Oparty na rozwiązaniu @ LB, kod VB (wpisany jako
Object
zamiastAnonymous
)Powinienem wspomnieć, że jest to szybkie i przydatne do tworzenia treści połączeń HTTP, w których ten typ nie jest wymagany. I
Object
zamiast używaćAnonymous
środków, które możesz utrzymaćOption Strict On
w środowisku Visual Studio - nie lubię tego wyłączać.źródło
źródło
Aby znaleźć właściwą ścieżkę, której używam
Zobacz https://stackoverflow.com/a/32071002/4420355
źródło
W przypadku dowolnej analizy JSON skorzystaj ze strony internetowej http://json2csharp.com/ (najprostszy sposób), aby przekonwertować JSON na klasę C # i przekształcić JSON w obiekt C #.
Następnie użyj JavaScriptSerializer (z System.Web.Script.Serialization), na wypadek, gdybyś nie chciał żadnej biblioteki DLL innej firmy, takiej jak newtonsoft.
Następnie możesz uzyskać swój obiekt za pomocą Items.name lub Items.Url itp.
źródło
Można to również zrobić w następujący sposób:
źródło