Большую часть двух дней я потратил на то, чтобы «разобраться» с примерами кода и т. Д., Пытаясь прочитать очень большой JSON-файл в массив в c #, чтобы потом можно было разбить его на 2d-массив для обработки.
Проблема, с которой я столкнулся, заключалась в том, что я не мог найти примеров, когда люди делали то, что пытался сделать. Это означало, что я просто немного редактировал код, надеясь на лучшее.
Мне удалось заставить что-то работать, что будет:
- Читать файл Пропустить заголовки и читать только значения в массив.
- Поместите определенное количество значений в каждую строку массива. (Чтобы потом можно было разбить пут на 2d массив)
Это было сделано с помощью приведенного ниже кода, но он вылетает из программы после ввода нескольких строк в массив. Это может быть связано с размером файла.
// 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;
}
}
}
Фрагмент JSON, с которым я работаю:
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
Мне нужны значения из этого JSON. Например, мне нужно «3.54», но я бы не хотел, чтобы он печатал «vcc».
Я надеюсь, что кто-то может показать мне, как читать файл JSON и извлекать только те данные, которые мне нужны, и помещать их в массив или что-то, что я могу использовать для последующего помещения в массив.
источник
Ответы:
Как насчет того, чтобы сделать все проще с Json.NET ?
Вы даже можете получить значения
dynamic
союзника, не объявляяItem
класс.источник
json
. Это должно быть содержимое вашего файла.StreamReader
равно есть, было бы лучше десериализовать непосредственно из потока, используя,JsonTextReader
как показано в Сможет ли Json.NET сериализовать / десериализовать в / из потока? , Этоr.ReadToEnd()
не нужно.Делать это самостоятельно - ужасная идея. Используйте Json.NET . Это уже решило проблему лучше, чем большинство программистов могли бы, если бы им давали месяцы подряд над ней работать. Что касается ваших конкретных потребностей, разбора на массивы и тому подобное, проверьте документацию , особенно на
JsonTextReader
. По сути, Json.NET обрабатывает массивы JSON изначально и будет разбирать их на строки, целые или любые другие типы без запроса от вас. Вот прямая ссылка на базовое использование кода как для читателя, так и для писателя, так что вы можете открыть его в свободном окне, пока вы учитесь работать с этим.Это к лучшему: будьте ленивы на этот раз и используйте библиотеку, чтобы решить эту распространенную проблему навсегда.
источник
Основываясь на решении @ LB, (типизированный
Object
вместоAnonymous
) код VBЯ должен отметить, что это быстро и полезно для создания содержимого HTTP-вызова, где тип не требуется. И использование,
Object
а неAnonymous
средства, которые вы можете поддерживатьOption Strict On
в своей среде Visual Studio - я ненавижу отключать это.источник
источник
Для нахождения правильного пути я использую
См. Https://stackoverflow.com/a/32071002/4420355
источник
Для любого анализа JSON используйте веб-сайт http://json2csharp.com/ (самый простой способ), чтобы преобразовать ваш JSON в класс C # и десериализовать ваш JSON в объект C #.
Затем используйте JavaScriptSerializer (из System.Web.Script.Serialization) на тот случай, если вам не понадобятся сторонние DLL, такие как newtonsoft.
Затем вы можете получить свой объект с помощью Items.name или Items.Url и т. Д.
источник
Это также можно сделать следующим образом:
источник