Estoy creando una aplicación para Android que crea un archivo de texto con objetos JSON y lo escribe en el almacenamiento interno. Tengo el siguiente código para hacer esto:Android Internal Storage, cómo analizar correctamente un archivo de texto JSON
JSONObject myJSON = new JSONObject();
//Set the JSON object with website, length and Id (time-stamp)
try {
myJSON.put("Length", trim)
.put("Website", data)
.put("Id", tx);
} catch (JSONException e1) {
e1.printStackTrace();
}
//Convert JSON object to a string and add a comma
String myJSONString = myJSON.toString();
myJSONString += ", ";
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_APPEND);
fos.write(myJSONString.getBytes());
fos.close();
//Log.d(TAG, "Written to file");
} catch (Exception e) {
Log.d(TAG, "cought");
e.printStackTrace();
}
ahora tengo un archivo de texto que se ve así:
{"Id":"20101211T155146","Length":10}, {"Id":"20101211T155155","Length":10},
{"Id":"20101211T155203","Length":10}, {"Id":"20101211T155252","Length":10},
me gustaría recoger ahora que los datos en el archivo JSON. La aplicación necesita escribir, almacenar y recuperar el JSON. El problema es cuando voy a analizar los objetos JSON del archivo usando:
String x = "";
InputStream is = this.getResources().openRawResource(R.raw.pwh);
byte [] buffer = new byte[is.available()];
while (is.read(buffer) != -1);
String jsontext = new String(buffer);
JSONArray entries = new JSONArray(jsontext);
x = "JSON parsed.\nThere are [" + entries.length() + "]\n\n";
int i;
for (i=0;i<entries.length();i++)
{
JSONObject post = entries.getJSONObject(i);
x += "------------\n";
x += "Id:" + post.getString("Id") + "\n";
x += "Length:" + post.getString("Length") + "\n\n";
}
Se lanza un error. Obtuve el código de análisis de un gran tutorial en: http://www.ibm.com/developerworks/web/library/x-andbene1/?ca=drs-#author1 En ese ejemplo, el código está esperando corchetes alrededor de todo el archivo y sin coma después del último objeto. Entonces necesitaría:
[{"Id":"20101211T155146","Length":10}, {"Id":"20101211T155155","Length":10},
{"Id":"20101211T155203","Length":10}, {"Id":"20101211T155252","Length":10}]
Pero escribo esas líneas JSON una a la vez en mi código; ¿Cómo puedo manipular el archivo de texto JSON para obtenerlo en el formato esperado?
ACTUALIZACIÓN:
El problema sigue siendo que si el usuario escribe la matriz JSON para el archivo y luego regresa y cambia de nuevo, se obtiene dos arrays JSON en ese archivo. De este modo:
[
{
"phonenumber": "15555215554",
"time": "20110113T173835",
"username": "edit username",
"email": " edit email",
"password": "edit password"
}
][
{
"phonenumber": "15555215554",
"time": "20110113T173900",
"username": "edit username",
"email": " edit email",
"password": "edit password"
},
{
"phonenumber": "15555215554",
"time": "20110113T173900",
"username": "edit username",
"email": " edit email",
"password": "edit password"
}
]
¿Cómo puedo leer la primera matriz, añadir el segundo y luego volver a escribir el archivo con ambas matrices fusionado en una sola?
Ver la actualización – Chris