2014-06-15 5 views
3

Tout d'abord permettez-moi de dire, j'ai cherché avant de poster, juste ne peux pas trouver la réponse.Impossible de désérialiser l'objet - BEGIN_OBJECT attendu mais était STRING à la ligne 1 colonne 1

Je n'arrive pas à désérialiser un fichier JSON. C'est un JSON valide (vérifié à http://jsonlint.com/) et il a été produit avec servicestack json serializer.

Je reçois

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 

Voici mon JSON envoyé par le serveur:

{ 
    "artistName": "", 
    "pathInfo": "C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3", 
    "indexPos": 0, 
    "messageType": "song" 
} 

Comment ça reçu:

{"artistName":"","pathInfo":"C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3","indexPos":0,"messageType":"song"} 

Voici l'objet pour le maintenir :

public class Song { 

    private String artistName; 
    private String albumName; 
    private String titleName; 
    private String pathInfo; 
    private String indexPos; 
    private String messageType; 


    public Song() { 
    } 
+0

Pouvez-vous s'il vous plaît poster JSON que vous avez exactement pas formaté et non modifiés du tout –

+0

Bien sûr, ajouté à poster – Yosi199

+0

Comment allez-vous l'analyser, afficher le code :) s'il vous plaît –

Répondre

3

D'accord, je finis par trouver la réponse moi-même, mais grâce à tout ce qui a soutenu et aidé.

Il s'agit du code qui a reçu l'objet JSON et initie la désérialisation à l'aide de GSON.

Map messageObjMap = new Gson().fromJson(message, Map.class); 
String type = messageObjMap.get("messageType").toString(); 

switch (type) { 
    case "song": 
     try { 
      Gson gson = new GsonBuilder().create(); 
      Song song = gson.fromJson(message, Song.class); 
      ... 
      ... 
     } ... 
    ... 
} 

"message" était supposé être le JSON entier. Au lieu de cela, c'était seulement une clé analysée par le JSON et c'est pourquoi la désérialisation n'a pas fonctionné. L'espoir qui va aider quelqu'un

+1

Bon travail :), Merci pour la réponse, maintenant j'ai appris Gson :) –

+0

Oui Gson est très cool et plus propre, puis l'analyse des éléments vous-même – Yosi199

0
String json = "{\"artistName\":\"\",\"pathInfo\":\"C:\\Users\\Unknown\\Desktop\\Audio Sketches\\Chill.mp3\",\"indexPos\":0,\"messageType\":\"song\"}"; 
final JSONObject jsonObject = new JSONObject(json); 
String path = jsonObject.getString("pathInfo"); 

Je ne l'ai pas utilisé Gson mais essayer et laissez-moi savoir si cela fonctionne

+0

Merci de votre aide, mais j'essaye d'utiliser Gson pour analyser cette chaîne JSON dans un objet entier. Votre chemin n'utilise pas Gson et obtient seulement une clé du JSON. – Yosi199

+0

Vous pouvez obtenir les autres séparément et ensuite les assigner à la classe Model –

+0

C'est ce que je fais si je ne comprends pas mais puisque la bibliothèque Gson est supposée le faire pour nous, c'est-à-dire mapper les valeurs aux champs objet Je voudrais utiliser ce – Yosi199

Questions connexes