Saya bekerja dengan sistem pihak ketiga yang menyediakan file audio dan berbagai data tentang file audio. Masalah yang saya hadapi adalah potongan data tersebut adalah objek JSON, yang disebarkan secara acak ke seluruh data biner file audio.
Tidak ada informasi yang diberikan tentang lokasi JSON dan data binernya.
Jadi, salah satu cara untuk mengatasinya adalah dengan menelusuri file tersebut, dan setiap kali saya menemukan {
, saya mencoba mengurai objek json dari titik itu. Jika saya berhasil, saya akan menyimpan objek yang diurai dan melanjutkan, jika tidak, saya mempertimbangkan data biner {
dan menambahkannya ke antrian audio.
Saya biasanya menggunakan JSON.Net untuk barang-barang JSON saya. Jika saya menggunakan JsonTextReader
pada aliran input saya, saya dapat mengurai dari posisi saya di array dan mendapatkan apa yang saya butuhkan. Saya kemudian akan mulai membaca lagi dari byte setelah penutupan }
Namun, JsonTextReader
akan membaca dalam jumlah besar sekaligus. Jadi ketika saya memeriksa posisi aliran yang mendasarinya, posisinya jauh melampaui penutupan }
. JsonTextReader
tidak memiliki properti apa pun mengenai posisinya, selain properti Line dan Char, yang akan merepotkan untuk digunakan. Namun, ada anggota pribadi _charPos
yang akan memberikan apa yang saya inginkan.
Apakah ada cara alternatif untuk mendapatkan informasi itu, tanpa memodifikasi perpustakaan, tanpa menghitung sendiri nomor barisnya, atau menggunakan refleksi untuk mendapatkan anggota pribadi?
IJsonLineInfo
sepertiIXmlLineInfo
yang memberikan nomor baris dan posisi, tetapi tidak indeks karakter, yang kurang dapat dibaca manusia tetapi lebih berguna dalam praktik. Omong-omong,_charPos
bukan yang Anda inginkan, itu adalah indeks di buffer_chars
. - person dbc   schedule 01.11.2018