Passei a maior parte de dois dias "brincando" com amostras de código e etc., tentando ler um arquivo JSON muito grande em uma matriz em c # para que depois eu possa dividi-la em uma matriz 2D para processamento.
O problema que eu estava tendo era que não conseguia encontrar exemplos de pessoas fazendo o que estava tentando fazer. Isso significava que eu estava apenas editando um pouco o código, esperando o melhor.
Consegui obter algo funcionando que:
- Leia o arquivo Perca os cabeçalhos e leia apenas os valores na matriz.
- Coloque uma certa quantidade de valores em cada linha de uma matriz. (Então eu poderia depois dividi-lo e colocá-lo em um array 2D)
Isso foi feito com o código abaixo, mas trava o programa depois de inserir algumas linhas na matriz. Isso pode ter a ver com o tamanho do arquivo.
// 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;
}
}
}
Um trecho do JSON com o qual estou trabalhando é:
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
Eu preciso dos valores deste JSON. Por exemplo, preciso de "3.54", mas não gostaria que ele imprimisse o "vcc".
Espero que alguém possa me mostrar como ler um arquivo JSON e extrair apenas os dados necessários e colocá-los em uma matriz ou algo que eu possa usar para colocar posteriormente em uma matriz.
fonte
Respostas:
Que tal facilitar tudo com o Json.NET ?
Você pode até obter os valores
dynamic
aliados sem declararItem
classe.fonte
json
. Deve ser o conteúdo do seu arquivo.StreamReader
maneira, seria melhor desserializar diretamente do fluxo usandoJsonTextReader
como mostrado em O Json.NET pode serializar / desserializar para / de um fluxo? . Or.ReadToEnd()
não é necessário.Fazer isso sozinho é uma péssima idéia. Use o Json.NET . Ele já resolveu o problema melhor do que a maioria dos programadores poderia, se recebessem meses a fio para trabalhar nele. Quanto às suas necessidades específicas, analisando matrizes e tal, verifique a documentação , particularmente em
JsonTextReader
. Basicamente, o Json.NET lida com matrizes JSON nativamente e as analisa em strings, ints ou qualquer que seja o tipo, sem a solicitação da sua parte. Aqui está um link direto para os usos básicos do código, tanto para o leitor quanto para o gravador, para que você possa abri-lo em uma janela sobressalente enquanto aprende a trabalhar com isso.Isso é o melhor: seja preguiçoso dessa vez e use uma biblioteca para resolver esse problema comum para sempre.
fonte
Com base na solução da @ LB, o código VB (digitado em
Object
vez deAnonymous
) éDevo mencionar que isso é rápido e útil para a construção de conteúdo de chamada HTTP onde o tipo não é necessário. E usar, em
Object
vez deAnonymous
meios, você pode manterOption Strict On
no ambiente do Visual Studio - eu odeio desativar isso.fonte
fonte
Para encontrar o caminho certo que estou usando
Consulte https://stackoverflow.com/a/32071002/4420355
fonte
Para qualquer análise JSON, use o site http://json2csharp.com/ (maneira mais fácil) para converter seu JSON em classe C # para desserializar seu JSON em objeto C #.
Em seguida, use o JavaScriptSerializer (de System.Web.Script.Serialization), caso você não queira nenhuma DLL de terceiros como a newtonsoft.
Então você pode obter seu objeto com Items.name ou Items.Url etc.
fonte
Isso também pode ser feito da seguinte maneira:
fonte