2014-10-20 10 views
19

मैंने पढ़ा है और JSON स्ट्रिंग जो एक सरणी के रूप में शुरू होता है पार्स करने के लिए कोशिश कर रहा हूँ (जैसे [{test: "test"}]) और मैं त्रुटि में प्रदर्शन जारी रहे:

Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ 

इस लाइन के लिए मेरी लॉग अंक में त्रुटि:

Gson gson = new GsonBuilder().create(); 
PayoutCharges payoutList = gson.fromJson(reader, PayoutCharges.class); 

कुछ stackoverflow जवाब के बाद, मैं PayoutCharge की एक सरणी सूची के रूप में PayoutCharges वर्ग बनाया। मैं इस समस्या को कैसे ठीक करूं ताकि जीएसओएन जानता है कि JSON स्ट्रिंग सरणी के अंदर है?

PayoutCharges.java

package com.app.driver.entity; 

import java.util.ArrayList; 

import com.google.gson.annotations.SerializedName; 

public class PayoutCharges { 
    //handle error 
    @SerializedName("error") 
    private Error mError; 

    public Error getError() { 
     return mError; 
    } 

    public void setError(Error error) { 
     mError = error; 
    } 

    //handle data 
    @SerializedName("payoutCharges") 
    private ArrayList<PayoutCharge> mPayoutCharges; 

    public ArrayList<PayoutCharge> getPayoutCharges() { 
     return mPayoutCharges; 
    } 

    public void setPayoutCharges(ArrayList<PayoutCharge> payoutCharges) { 
     mPayoutCharges = payoutCharges; 
    } 
} 

पढ़ने @ Ridcully की प्रतिक्रिया के बाद, मैं अगर वहाँ मुझे PayoutCharges.java अद्यतन करने के लिए तो यह जानता है कि कि JSON एक सरणी है के लिए एक तरीका है पूछना चाहता हूँ। @SerializedName([]) की तरह कुछ?

उत्तर

25

नीचे कोड अपने नमूना json मूल्य के लिए काम करता है:

String val1 = "[{test: \"test\"}]"; 

final GsonBuilder gsonBuilder = new GsonBuilder(); 
final Gson gson = gsonBuilder.create(); 

TestCase[] testCase = gson.fromJson(val1, TestCase[].class); 

टेस्टकेस धारक वर्ग:

private static class TestCase { 
    @SerializedName("test") 
    private String field; 
} 

आपके द्वारा साझा किए गए परीक्षण उदाहरण में एक सरणी है जिसमें ऑब्जेक्ट्स हैं। इसलिए आपको किसी ऑब्जेक्ट (सरणी) में जेसन मान को deserializing करते समय अपने pojo वर्ग की एक सरणी का उपयोग करना होगा।

यदि यह उत्तर आपकी मदद नहीं करता है (जिसका अर्थ है कि आपके असली जेसन मूल्य पर कुछ अलग है), तो आपको उस वास्तविक जेसन को बेहतर तरीके से साझा करना चाहिए जिस पर आप काम कर रहे हैं।

+0

ट्यूनर आपने अपना दिन बचाया। समाधान – PPD

+0

के लिए धन्यवाद आसान लेकिन महान उदाहरण, यह मेरी समस्या को हल करता है !, धन्यवाद – RoDo

+0

धन्यवाद यह काम कर रहा है –

0

आप एक वर्ग (PayoutCharges) के रूप में फिर से PayoutCharge ऑब्जेक्ट की श्रेणी को परिभाषित है, तो अपने JSON कुछ इस तरह दिखना चाहिए:

{"error" : <... JSONified Error object>, 
"payoutCharges" : [{"test" : "test"}] 
} 
+0

वहाँ मेरे लिए एक तरह से JSON रखने के लिए के रूप में है (iOS एप्लिकेशन भी तो मैं यह जोड़ तोड़ से बचने के लिए है JSON उत्तर उपयोग कर रहा है) क्या है? – Huy

-1

gson.fromJson() के दूसरे पैरामीटर से सावधान रहें, इसे सरणी की कक्षा की आवश्यकता है। उदाहरण के लिए डेटा [] कक्षा।

+0

सही होने पर, यह पहले से ही स्वीकृत उत्तर से कुछ भी नहीं जोड़ता है, जो कि अधिक वर्बोज़ है। एक हालिया प्रश्न का उत्तर देने का प्रयास करें, आदर्श रूप से जिसकी अभी तक उत्तर नहीं दिया गया है। – Benjamin

0

enter image description here उपरोक्त है जिसे मुझे पार्स करने की आवश्यकता है; यहाँ मेरी इकाई है:

**package com.winway.ecloud.data.entity; 

import java.util.List; 


public class WellSectionEntity { 


     private String name;  

     private String picture; 

     private String remark; 

     private List<Point> pos;  

     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 
     public String getPicture() { 
      return picture; 
     } 
     public void setPicture(String picture) { 
      this.picture = picture; 
     } 
     public String getRemark() { 
      return remark; 
     } 
     public void setRemark(String remark) { 
      this.remark = remark; 
     } 
     public List<Point> getPos() { 
      return pos; 
     } 
     public void setPos(List<Point> pos) { 
      this.pos = pos; 
     } 

} 
package com.winway.ecloud.data.entity; 


public class Point { 
    public float x;// 
    public float y;// 
    public float circleR = 50;// 
    public float r;// 
    private String lineNO;// 
    private String lineName;// 
    private String no;// 
    private int deep;// 


    public float getX() { 
     return x; 
    } 

    public void setX(float x) { 
     this.x = x; 
    } 

    public float getY() { 
     return y; 
    } 

    public void setY(float y) { 
     this.y = y; 
    } 

    public float getR() { 
     return r; 
    } 

    public float getCircleR() { 
     return circleR; 
    } 

    public void setCircleR(float circleR) { 
     this.circleR = circleR; 
    } 

    public void setR(float r) { 
     this.r = r; 
    } 

    public String getLineNO() { 
     return lineNO; 
    } 

    public void setLineNO(String lineNO) { 
     this.lineNO = lineNO; 
    } 

    public String getLineName() { 
     return lineName; 
    } 

    public void setLineName(String lineName) { 
     this.lineName = lineName; 
    } 

    public String getNo() { 
     return no; 
    } 

    public void setNo(String msg) { 
     this.no = msg; 
    } 

    public int getDeep() { 
     return deep; 
    } 

    public void setDeep(int deep) { 
     this.deep = deep; 
    } 
} 

final GsonBuilder gsonBuilder = new GsonBuilder(); 
     final Gson gson = gsonBuilder.create(); 

jsonTemp एक स्ट्रिंग, जिसमें शामिल क्या मैं इस इस arcticle के सिर पर सूची है solution1:

WellSectionEntity[] listSection = gson.fromJson(***jsonTemp***, WellSectionEntity[].class); 

solution2:

List<WellSectionEntity> sectionlist = gson.fromJson(jsonTemp, new TypeToken<List<WellSectionEntity>>(){}.getType()); 

धन्यवाद DevrimTuncer।

-2

ऐसा इसलिए है क्योंकि आपके ऑब्जेक्ट में दूसरे कॉलम का नाम और प्रकार पार्स किए गए डेटा के साथ संघर्ष में है। यदि आपके पास डेटा में डेटा में से कोई एक नहीं है, तो आप इसे अंतिम कॉलम में लिख सकते हैं।

image description

+0

स्क्रीनशॉट के बजाए, कोड कोड के अंदर अपना कोड प्रदान करना बेहतर है –

+0

或者 你 可以 检查 一下 符号 是否 正确, 比如 "[[" 的 错误 符号 या आप जांच सकते हैं कि सही प्रतीक, जैसे "मुक्त "त्रुटि प्रतीक – keinta

संबंधित मुद्दे