Saya telah menghabiskan bagian terbaik dari dua hari "faffing" tentang dengan contoh kode dan lain-lain, mencoba membaca file JSON yang sangat besar ke dalam array di c # jadi saya nanti dapat membaginya menjadi array 2d untuk diproses.
Masalah yang saya alami adalah saya tidak dapat menemukan contoh orang melakukan apa yang saya coba lakukan. Ini berarti saya hanya mengedit kode sedikit berharap untuk yang terbaik.
Saya telah berhasil membuat sesuatu berfungsi yang akan:
- Baca file Miss out header dan hanya baca nilai ke dalam array.
- Tempatkan sejumlah nilai pada setiap baris array. (Jadi saya kemudian bisa membaginya menjadi 2d array)
Ini dilakukan dengan kode di bawah ini tetapi crash program setelah memasukkan beberapa baris ke dalam array. Ini mungkin ada hubungannya dengan ukuran file.
// 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;
}
}
}
Cuplikan dari JSON yang saya kerjakan adalah:
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
Saya perlu nilai dari JSON ini. Sebagai contoh, saya perlu "3.54", tetapi saya tidak ingin mencetak "vcc".
Saya berharap seseorang dapat menunjukkan kepada saya cara membaca file JSON dan hanya mengekstrak data yang saya butuhkan dan memasukkannya ke dalam array atau sesuatu yang bisa saya gunakan untuk kemudian dimasukkan ke dalam array.
sumber
Jawaban:
Bagaimana dengan mempermudah semuanya dengan Json.NET ?
Anda bahkan bisa mendapatkan nilai-nilai
dynamic
sekutu tanpa mendeklarasikanItem
kelas.sumber
json
. Itu harus konten file Anda.StreamReader
tetap memiliki, akan lebih baik deserialize langsung dari stream menggunakanJsonTextReader
seperti yang ditunjukkan pada Can Json.NET membuat serial / deserialize ke / dari stream? . Itur.ReadToEnd()
tidak dibutuhkan.Melakukan ini sendiri adalah ide yang buruk. Gunakan Json.NET . Ini telah memecahkan masalah dengan lebih baik daripada kebanyakan programmer jika mereka diberi waktu berbulan-bulan untuk menyelesaikannya. Adapun kebutuhan spesifik Anda, parsing ke dalam array dan semacamnya, periksa dokumentasi , khususnya pada
JsonTextReader
. Pada dasarnya, Json.NET menangani array JSON secara asli dan akan menguraikannya menjadi string, int, atau apa pun tipe yang terjadi tanpa diminta dari Anda. Berikut ini adalah tautan langsung ke penggunaan kode dasar untuk pembaca dan penulis, sehingga Anda dapat membuatnya terbuka di jendela cadangan saat Anda belajar untuk bekerja dengan ini.Ini yang terbaik: Jadilah malas saat ini dan gunakan perpustakaan sehingga Anda memecahkan masalah umum ini selamanya.
sumber
Berdasarkan solusi @ LB, kode VB (diketik
Object
daripadaAnonymous
)Saya harus menyebutkan bahwa ini cepat dan berguna untuk membuat konten panggilan HTTP yang jenisnya tidak diperlukan. Dan menggunakan
Object
daripadaAnonymous
berarti Anda dapat mempertahankanOption Strict On
di lingkungan Visual Studio Anda - Saya benci mematikannya.sumber
sumber
Untuk menemukan jalan yang benar saya gunakan
Lihat https://stackoverflow.com/a/32071002/4420355
sumber
Untuk salah satu parse JSON, gunakan situs web http://json2csharp.com/ (cara termudah) untuk mengubah JSON Anda menjadi kelas C # untuk membatalkan deserialisasi JSON Anda menjadi objek C #.
Kemudian gunakan JavaScriptSerializer (dari System.Web.Script.Serialization), jika Anda tidak ingin DLL pihak ketiga seperti newtonsoft.
Kemudian Anda bisa mendapatkan objek Anda dengan Items.name atau Items.Url dll.
sumber
Ini juga dapat dilakukan dengan cara berikut:
sumber