2014-12-17 1 views
2

Я нашел много ответов для этого исключения, но не нашел того, что помогает моему делу.com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но был STRING в строке 2 столбца 5

У меня есть строка:

"x":{ 
    "ver":1, 
    "size":258, 
    "inputs":[ 
    { 
     "sequence":4294967295, 
     "prev_out":{ 
      "spent":true, 
      "tx_index":72163587, 
      "type":0, 
      "addr":"16XEHjFH8bKzSCLhapg6SBvhCoM1YNJeaZ", 
      "value":2253421875, 
      "n":1, 
      "script":"76a9143c90334c94bc129e48c6c793cd54632977250b8088ac" 
     }, 
     "script":"4830450221008cf79d6070885906535f07260100bf41d807323dd653d132019683af29adaac7022061950465a42d3849961a58090e6411e21f13c23b21c52570550f3cee0e678c27014104624d706a244fc9140f8457199e07da3b8b47b385823262b9e0e9e8ab67970712e998bcb9d7f98d2294ebbff5d20852cbd006af59af62365746891b49dd0ffbc9" 
    } 
    ], 
    "time":1418836999, 
    "tx_index":72171095, 
    "vin_sz":1, 
    "hash":"af7c604d6cb0a8f2af0ea6ed90d9eceea88557815f6057f3f7c5438fb1e7f722", 
    "vout_sz":2, 
    "relayed_by":"127.0.0.1", 
    "out":[ 
    { 
     "spent":false, 
     "tx_index":72171095, 
     "type":0, 
     "addr":"153D9XaEbiVu2JH9HtRukra254RHKm6s3M", 
     "value":1500000000, 
     "n":0, 
     "script":"76a9142c4b7991b8b3173b188d5341b1c7f468b45157c588ac" 
    }, 
    { 
     "spent":false, 
     "tx_index":72171095, 
     "type":0, 
     "addr":"16XEHjFH8bKzSCLhapg6SBvhCoM1YNJeaZ", 
     "value":753418875, 
     "n":1, 
     "script":"76a9143c90334c94bc129e48c6c793cd54632977250b8088ac" 
    } 
    ] 
} 

Когда я пытаюсь разобрать эту строку в бобе:. ToolBox.getGson() fromJson (сообщение, Transaction.class);

я получаю следующее исключение:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 2 column 5 

класса Транзакция выглядит следующим образом:

public class Transaction { 

    private long time; 
    private Input[] inputs; 
    private long vout_sz; 
    private String relayed_by; 
    private long vin_sz; 
    private long tx_index; 
    private int ver; 
    private Out[] out; 
    private long size; 
    private long result; 
    private long block_height; 
    private String note; 
    private String hash; 

    public long getTime() { 
     return time; 
    } 
    public void setTime(long time) { 
     this.time = time; 
    } 
    public Input[] getInputs() { 
     return inputs; 
    } 
    public void setInputs(Input[] inputs) { 
     this.inputs = inputs; 
    } 
    public long getVout_sz() { 
     return vout_sz; 
    } 
    public void setVout_sz(long vout_sz) { 
     this.vout_sz = vout_sz; 
    } 
    public String getRelayed_by() { 
     return relayed_by; 
    } 
    public void setRelayed_by(String relayed_by) { 
     this.relayed_by = relayed_by; 
    } 
    public long getVin_sz() { 
     return vin_sz; 
    } 
    public void setVin_sz(long vin_sz) { 
     this.vin_sz = vin_sz; 
    } 
    public long getTx_index() { 
     return tx_index; 
    } 
    public void setTx_index(long tx_index) { 
     this.tx_index = tx_index; 
    } 
    public int getVer() { 
     return ver; 
    } 
    public void setVer(int ver) { 
     this.ver = ver; 
    } 
    public Out[] getOut() { 
     return out; 
    } 
    public void setOut(Out[] out) { 
     this.out = out; 
    } 
    public long getSize() { 
     return size; 
    } 
    public void setSize(long size) { 
     this.size = size; 
    } 
    public long getResult() { 
     return result; 
    } 
    public void setResult(long result) { 
     this.result = result; 
    } 
    public long getBlock_height() { 
     return block_height; 
    } 
    public void setBlock_height(long block_height) { 
     this.block_height = block_height; 
    } 
    public String getNote() { 
     return note; 
    } 
    public void setNote(String note) { 
     this.note = note; 
    } 
    public String getHash() { 
     return hash; 
    } 
    public void setHash(String hash) { 
     this.hash = hash; 
    } 
} 

Входной класс (массив, который находится в классе транзакций)

public class Input { 

    private PrevOut prev_out; 
    private String script; 
    private long sequence; 

    public PrevOut getPrev_out() { 
     return prev_out; 
    } 

    public void setPrev_out(PrevOut prev_out) { 
     this.prev_out = prev_out; 
    } 

    public String getScript() { 
     return script; 
    } 

    public void setScript(String script) { 
     this.script = script; 
    } 

    public long getSequence() { 
     return sequence; 
    } 

    public void setSequence(long sequence) { 
     this.sequence = sequence; 
    } 

} 

Out (массив которого находится в классе Transaction)

public class Out { 

    private boolean spent; 
    private long n; 
    private long value; 
    private String addr; 
    private long tx_index; 
    private int type; 
    private String script; 

    public boolean getSpent() { 
     return spent; 
    } 
    public void setSpent(boolean spent) { 
     this.spent = spent; 
    } 
    public long getN() { 
     return n; 
    } 
    public void setN(long n) { 
     this.n = n; 
    } 
    public long getValue() { 
     return value; 
    } 
    public void setValue(long value) { 
     this.value = value; 
    } 
    public String getAddr() { 
     return addr; 
    } 
    public void setAddr(String addr) { 
     this.addr = addr; 
    } 
    public long getTx_index() { 
     return tx_index; 
    } 
    public void setTx_index(long tx_index) { 
     this.tx_index = tx_index; 
    } 
    public int getType() { 
     return type; 
    } 
    public void setType(int type) { 
     this.type = type; 
    } 
    public String getScript() { 
     return script; 
    } 
    public void setScript(String script) { 
     this.script = script; 
    } 
} 

Что мне не хватает? Как я могу проанализировать строку в классе Transaction?

+1

Пожалуйста, дважды проверьте свой JSON. В настоящее время он недействителен. –

+0

Спасибо за указание. Я исправил конечную скобку, которая упоминалась в разделе кода. Я получаю строку json из API, которую я конвертирую в указанную выше строку, используя код: message = message.substring (16, message.length() - 1); Есть ли еще что-то не так, что вы видите в JSON выше? –

+0

Да, это начинается с символа '' '. Это знаменует строку JSON, но у вас есть пара ключей-значений, которая не является элементом JSON-корня. –

ответ

4

Ваша строка JSON не является допустимым объектом JSON. Он должен начинаться и заканчиваться { и }. Вы можете запустить его через валидатор JSON, например JSONLint, и посмотреть вашу проблему.

{ 
    "x":{ 
    ... 
} 
+0

Да, вот и все. Thumbs up! –

Смежные вопросы