0

SpellingError オブジェクトの配列を含む JSON 文字列があります。Gson を使用して、これを SpellingErrors のリストに変換します。解析は正常に機能します (または、少なくとも ddoes は解析エラーをスローしません)。ただし、SpellingErrors のリストになることを望んでいたものを反復しようとすると、実際には StringMaps であることがわかり、「com.google.gson.internal.StringMap を SpellingError にキャストできません」というエラーが表示されます。

JSON文字列からオブジェクトの配列を引き出すためにGsonを使用する正しい方法は何ですか? 3 つのオブジェクトを表す 3 つの StringMap オブジェクトが配列にあることがわかります。

これが問題のコードです

    spellingErrorsJSON = "[{\"context\":\"This is a stmple string\",\"errorIndex\":\"3\"},{\"context\":\"This is a stmple string 2\",\"errorIndex\":\"3\"},{\"context\":\"This is a stmple string 3\",\"errorIndex\":\"3\"}]";
    List<SpellingError>spellingErrors;  
    spellingErrors = m_gson.fromJson( spellingErrorsJSON, List.class );

    for( SpellingError spellingError : spellingErrors )
    {
        if( spellingError.isValid() )
        {
            String spellingMistake = spellingError.getSpellingMistake();
            String[] suggestions = Query.lookupSpelling( spellingMistake, LOCALE_US);
        }
    }

しかし、私が使用する場合

m_gson.fromJson( spellingErrorsJSON, SpellingError[].class );   

代わりに、「BEGIN_OBJECT が必要ですが、BEGIN_ARRAY でした」という解析例外が発生します。</p>

ここに私の SpellingError PoJo があります

public class SpellingError
{
    private String [] context;
    private int errorIndex;

    public String[] getContext()
    {
        return context;
    }

    public void setContext(String[] context)
    {
        this.context = context;
    }

    public int getErrorIndex()
    {
        return errorIndex;
    }

    public void setErrorIndex(int index)
    {
        this.errorIndex = index;
    }
}
4

1 に答える 1

0

TypeToken を使用して、結果リストに含めるオブジェクトのタイプを Gson に伝えることができます。回線を交換する

spellingErrors = m_gson.fromJson( spellingErrorsJSON, List.class );

Type collectionType = new TypeToken<List<SpellingError>>(){}.getType();
spellingErrors = m_gson.fromJson( spellingErrorsJSON, collectionType );

編集:これは私のために働いています:

import java.lang.reflect.Type;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

class SpellingError
{
    private String  context;
    private int errorIndex;

    public String getContext()
    {
        return context;
    }

    public void setContext(String context)
    {
        this.context = context;
    }

    public int getErrorIndex()
    {
        return errorIndex;
    }

    public void setErrorIndex(int index)
    {
        this.errorIndex = index;
    }
}


public class TestGson {
    private static Gson m_gson = new Gson();

    class DataPacket {
        public String fn;
        public Object data;
    }

    class ChatPacket {
        public int roomId;
        public String message;
    }


    public static void main(String[] args) {
        String spellingErrorsJSON = "[{\"context\":\"This is a stmple string\",\"errorIndex\":\"3\"},{\"context\":\"This is a stmple string 2\",\"errorIndex\":\"3\"},{\"context\":\"This is a stmple string 3\",\"errorIndex\":\"3\"}]";
        List<SpellingError>spellingErrors;  
        Type collectionType = new TypeToken<List<SpellingError>>(){}.getType();
        spellingErrors = m_gson.fromJson( spellingErrorsJSON, collectionType );


        for( SpellingError spellingError : spellingErrors )
        {
            String spellingMistake = spellingError.getContext();
        }

    }

}
于 2012-11-13T16:42:21.063 に答える