He pasado la mayor parte de dos días "jugando" con muestras de código, etc., tratando de leer un archivo JSON muy grande en una matriz en C # para luego poder dividirlo en una matriz 2D para procesarlo.
El problema que tenía era que no podía encontrar ningún ejemplo de personas que hicieran lo que estaba tratando de hacer. Esto significaba que solo estaba editando código un poco esperando lo mejor.
He logrado hacer que algo funcione que:
- Leer el archivo Se pierden los encabezados y solo se leen los valores en la matriz.
- Coloque una cierta cantidad de valores en cada línea de una matriz. (Entonces podría dividirlo y ponerlo en una matriz 2d)
Esto se hizo con el código a continuación, pero bloquea el programa después de ingresar algunas líneas en la matriz. Esto podría tener que ver con el tamaño del archivo.
// 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;
}
}
}
Un fragmento del JSON con el que estoy trabajando es:
[
{ "millis": "1000",
"stamp": "1273010254",
"datetime": "2010/5/4 21:57:34",
"light": "333",
"temp": "78.32",
"vcc": "3.54" },
]
Necesito los valores de este JSON. Por ejemplo, necesito "3.54", pero no quisiera que imprima el "vcc".
Espero que alguien pueda mostrarme cómo leer un archivo JSON y solo extraer los datos que necesito y ponerlos en una matriz o algo que pueda usar para luego colocarlos en una matriz.
fuente
Respuestas:
¿Qué tal hacer todas las cosas más fáciles con Json.NET ?
Incluso puede obtener los valores
dynamic
aliados sin declarar laItem
clase.fuente
json
. Debe ser el contenido de su archivo.StreamReader
, sería mejor deserializar directamente de la transmisión usandoJsonTextReader
como se muestra en ¿Puede Json.NET serializar / deserializar a / de una transmisión? . Elr.ReadToEnd()
no es necesario.Hacer esto usted mismo es una idea horrible. Utiliza Json.NET . Ya ha resuelto el problema mejor que la mayoría de los programadores si se les diera meses para trabajar en él. En cuanto a sus necesidades específicas, analizando las matrices y demás, consulte la documentación , especialmente en
JsonTextReader
. Básicamente, Json.NET maneja las matrices JSON de forma nativa y las analizará en cadenas, entradas o cualquier tipo que sea sin que usted lo solicite. Aquí hay un enlace directo a los usos básicos del código tanto para el lector como para el escritor, para que pueda abrirlo en una ventana libre mientras aprende a trabajar con esto.Esto es lo mejor: sea flojo esta vez y use una biblioteca para resolver este problema común para siempre.
fuente
Basado en la solución de @ LB, el código VB (escrito en
Object
lugar deAnonymous
) esDebo mencionar que esto es rápido y útil para construir contenido de llamadas HTTP donde no se requiere el tipo. Y usar en
Object
lugar deAnonymous
significa que puede mantenerOption Strict On
en su entorno de Visual Studio: odio desactivar eso.fuente
fuente
Para encontrar el camino correcto que estoy usando
Ver https://stackoverflow.com/a/32071002/4420355
fuente
Para cualquiera de los análisis JSON, use el sitio web http://json2csharp.com/ (la forma más fácil) para convertir su JSON en clase C # para deserializar su JSON en objeto C #.
Luego use el JavaScriptSerializer (de System.Web.Script.Serialization), en caso de que no desee ninguna DLL de terceros como newtonsoft.
Luego puede obtener su objeto con Items.name o Items.Url, etc.
fuente
Esto también se puede hacer de la siguiente manera:
fuente