una socket sirve showmessagedialog setvalueat servidor seleccionada que para obtener mostrar metodos mensaje los fila ejemplos datos con como cliente java json parsing gson

socket - setvalueat jtable java



"Se esperaba BEGIN_OBJECT pero estaba STRING en la línea 1, columna 1" (9)

Tengo este método:

public static Object parseStringToObject(String json) { String Object = json; Gson gson = new Gson(); Object objects = gson.fromJson(object, Object.class); parseConfigFromObjectToString(object); return objects; }

Y quiero analizar un JSON con:

public static void addObject(String IP, Object addObject) { try { String json = sendPostRequest("http://" + IP + ":3000/config/add_Object", ConfigJSONParser.parseConfigFromObjectToString(addObject)); addObject = ConfigJSONParser.parseStringToObject(json); } catch (Exception ex) { ex.printStackTrace(); } }

Pero recibo un mensaje de error:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: se esperaba BEGIN_OBJECT pero estaba STRING en la línea 1 columna 1


Asegúrese de tener objetos DESERIALIZADOS como DATE / DATETIME, etc. Si envía directamente JSON sin deserializarlo, puede causar este problema.


El JSON no válido del servidor siempre debe ser un caso de uso esperado. Un millón de cosas pueden salir mal durante la transmisión. Gson es un poco complicado, porque su salida de error le dará un problema, y ​​la excepción real que detecte será de un tipo diferente.

Con todo eso en mente, la solución adecuada en el lado del cliente es

try { gson.fromJSON(ad, Ad.class); //... } catch (IllegalStateException | JsonSyntaxException exception) { //...

Si desea saber por qué el JSON que recibió del servidor es incorrecto, puede mirar dentro de su bloque catch con la excepción. Pero incluso si es su problema, no es responsabilidad del cliente arreglar el JSON que recibe de Internet.

De cualquier manera, es responsabilidad del cliente decidir qué hacer cuando se pone mal JSON. Dos posibilidades son rechazar el JSON y no hacer nada, y volver a intentarlo.

Si va a intentarlo de nuevo, le recomiendo configurar una bandera dentro del bloque try / catch y luego responder a esa bandera fuera del bloque try / catch. Probablemente, Try / catch anidado es la forma en que Gson nos metió en este lío con nuestro seguimiento de pila y las excepciones no coinciden.

En otras palabras, aunque admito que no se ve muy elegante, recomendaría

boolean failed = false; try { gson.fromJSON(ad, Ad.class); //... } catch (IllegalStateException | JsonSyntaxException exception) { failed = true; //... } if (failed) { //...


En Retrofit2, cuando desee enviar sus parámetros en bruto, debe usar Scalars.

primero agrega esto en tu gradle:

compile ''com.squareup.retrofit2:retrofit:2.3.0'' compile ''com.squareup.retrofit2:converter-gson:2.3.0'' compile ''com.squareup.retrofit2:converter-scalars:2.3.0'' public interface ApiInterface { String URL_BASE = "http://10.157.102.22/rest/"; @Headers("Content-Type: application/json") @POST("login") Call<User> getUser(@Body String body); }

my SampleActivity:

public class SampleActivity extends AppCompatActivity implements Callback<User> { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sample); Retrofit retrofit = new Retrofit.Builder() .baseUrl(ApiInterface.URL_BASE) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); ApiInterface apiInterface = retrofit.create(ApiInterface.class); // prepare call in Retrofit 2.0 try { JSONObject paramObject = new JSONObject(); paramObject.put("email", "[email protected]"); paramObject.put("pass", "4384984938943"); Call<User> userCall = apiInterface.getUser(paramObject.toString()); userCall.enqueue(this); } catch (JSONException e) { e.printStackTrace(); } } @Override public void onResponse(Call<User> call, Response<User> response) { } @Override public void onFailure(Call<User> call, Throwable t) { } }

Referencia: [ ¿Cómo PUBLICAR todo JSON sin procesar en el cuerpo de una solicitud de modificación?


En mi caso, estoy devolviendo el objeto JSON como

{"data": "", "message": "Asistencia guardada con éxito .. !!!", "status": "success"}

Resuelto cambiándolo como

{"datos": {}, "mensaje": "Asistencia guardada con éxito .. !!!", "estado": "éxito"}

Aquí los datos son un sub JsonObject y deben comenzar desde {no ""


He venido a compartir una solución. El error me sucedió después de forzar al notbook a colgar. posible solución clean preject .


Incluso sin ver su cadena JSON, puede ver en el mensaje de error que no es la estructura correcta para analizar en una instancia de su clase.

Gson espera que su cadena JSON comience con un objeto que abra la llave. p.ej

{

Pero la cadena que le has pasado comienza con comillas abiertas

"


No use jsonObject.toString en un objeto JSON.


Tal vez su JSON Object sea ​​correcto, pero la respuesta que recibió no es su información válida. Al igual que cuando conecta el WiFi no válido, puede recibir una respuesta extraña < html>.....< /html> que GSON no puede analizar gramaticalmente.

puede que tenga que try..catch.. para que esta extraña respuesta evite el bloqueo.


si su formato json y las variables están bien, verifique las consultas de su base de datos ... incluso si los datos se guardan en db correctamente, el problema real podría estar allí ... vuelva a verificar sus consultas e intente nuevamente. Espero que ayude