[{"name":"rpd","id":255,"type":"MONITOR","available":true,"unitId":1,"ip":"99.7.7.243"},{"name":"jiankong","id":1873,"type":"MONITOR","available":true,"unitId":1,"ip":"99.7.7.233"},{"name":"monitor rpd","id":259,"type":"MONITOR","available":true,"unitId":1,"ip":"99.7.7.241"},{"name":"总行1604V","id":174,"type":"HDX","available":true,"unitId":1,"ip":"99.7.7.134"},{"name":"总行1603V","id":2270,"type":"HDX","available":true,"unitId":1,"ip":"99.7.7.133"},{"name":"总行1602V","id":2268,"type":"HDX","available":true,"unitId":1,"ip":"99.7.7.132"},{"name":"研发六楼603","id":2187,"type":"HDX","available":true,"unitId":1,"ip":"99.1.113.61"},{"name":"上海金融","id":2189,"type":"HDX","available":true,"unitId":1,"ip":"99.14.64.231"}]以上是json数据
public class EndpointInfo {


long id;
String type;
String name;
String ip;
boolean available;
long unitId;

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getUnitId() {
return unitId;
}
public void setUnitId(long unitId) {
this.unitId = unitId;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public boolean getAvailable() {
return available;
}
public void setAvailable(boolean available) {
this.available = available;
}

}我对应的bean类private static ArrayList<EndpointInfo> m_endpointinfolist = null;
Type typeoft =  new TypeToken<ArrayList<EndpointInfo>>(){}.getType();
m_endpointinfolist = gson.fromJson(sb.toString(),typeoft);private static final ObjectMapper mapper = new ObjectMapper();
private static ArrayList<EndpointInfo> m_endpointinfolist = null;
private static ArrayList<EndpointInfo> m_endpointinfolist = null;
m_endpointinfolist = mapper.readValue(sb.toString(), new TypeReference<ArrayList<EndpointInfo>>(){});以上是使用的2个包,debug都是可以顺利解析的,但是我打包成jar之后就会出现异常java json webservicejavajsonwebservicejson解析

解决方案 »

  1.   


    org.codehaus.jackson.JsonParseException: Unexpected character ('i' (code 105)): was expecting comma to separate OBJECT entries
     at [Source: java.io.StringReader@14c194d; line: 1, column: 1388]
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:929)
    at org.codehaus.jackson.impl.JsonParserBase._reportError(JsonParserBase.java:632)
    at org.codehaus.jackson.impl.JsonParserBase._reportUnexpectedChar(JsonParserBase.java:565)
    at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:113)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:339)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:281)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:68)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:51)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:21)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1282)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:892)
    at com.calwan.main.conferenceProcesser.run(conferenceProcesser.java:333)
    at java.lang.Thread.run(Thread.java:662)
    这是使用gson包报的错误信息
    org.codehaus.jackson.JsonParseException: Unexpected character ('i' (code 105)): was expecting comma to separate OBJECT entries
     at [Source: java.io.StringReader@76e369; line: 1, column: 846]
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:929)
    at org.codehaus.jackson.impl.JsonParserBase._reportError(JsonParserBase.java:632)
    at org.codehaus.jackson.impl.JsonParserBase._reportUnexpectedChar(JsonParserBase.java:565)
    at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.java:113)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:339)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:281)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:68)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:51)
    at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:21)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1282)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:892)
    at com.calwan.main.conferenceProcesser.run(conferenceProcesser.java:333)
    at java.lang.Thread.run(Thread.java:662)
    这是使用jackson 报的错误信息,
    请帮忙看下,是不是我的bean类设计有错误,错在哪儿了
      

  2.   

    异常是需要逗号分隔。什么叫打了jar包就出错?你打了哪些?
      

  3.   

    eclipse 调试的时候没有出现任务异常,而且能够顺利解析json数据
    打包是用eclipse 的export导出,将所有依赖包一起打包,dos测试运行时报错
      

  4.   

    我重新发一次吧,上面有点乱
    我的bean类public class EndpointInfo {
    long id;
    String type;
    String name;
    String ip;
    boolean available;
    long unitId;

    public long getId() {
    return id;
    }
    public void setId(long id) {
    this.id = id;
    }
    public long getUnitId() {
    return unitId;
    }
    public void setUnitId(long unitId) {
    this.unitId = unitId;
    }
    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getIp() {
    return ip;
    }
    public void setIp(String ip) {
    this.ip = ip;
    }
    public boolean getAvailable() {
    return available;
    }
    public void setAvailable(boolean available) {
    this.available = available;
    }

    }
    我的测试类
    public class testMain { public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    File file = new File("abc.txt");
    BufferedReader br = null;
    br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    StringBuilder sb = new StringBuilder();
    String string ;
    while ((string = br.readLine()) != null) {
    sb.append(string);
    }
     ArrayList<EndpointInfo> m_endpointinfolist = null;
     Gson gson = new Gson();
     m_endpointinfolist = gson.fromJson(sb.toString(), new TypeToken<ArrayList<EndpointInfo>>(){}.getType());
     ObjectMapper mapper = new ObjectMapper();
     //m_endpointinfolist = mapper.readValue(sb.toString(), new TypeReference<ArrayList<EndpointInfo>>(){});
     for(int i =0; i< m_endpointinfolist.size();i++)  
     {
     System.out.println("第"+i+"组:");
     System.out.println("id:"+m_endpointinfolist.get(i).getId()+" type:"+m_endpointinfolist.get(i).getType()+" ip:"+m_endpointinfolist.get(i).getIp()+" name:"+m_endpointinfolist.get(i).getName()+" unitid:"+m_endpointinfolist.get(i).getUnitId()+" available:"+m_endpointinfolist.get(i).getAvailable() );
     }
     System.in.read();
    }

    }
    abc.txt :[{"name":"rpd","id":255,"type":"MONITOR","available":true,"unitId":1,"ip":"99.7.7.243"},{"name":"jiankong","id":1873,"type":"MONITOR","available":true,"unitId":1,"ip":"99.7.7.233"},{"name":"monitor rpd","id":259,"type":"MONITOR","available":true,"unitId":1,"ip":"99.7.7.241"},{"name":"总行1604V","id":174,"type":"HDX","available":true,"unitId":1,"ip":"99.7.7.134"},{"name":"总行1603V","id":2270,"type":"HDX","available":true,"unitId":1,"ip":"99.7.7.133"},{"name":"总行1602V","id":2268,"type":"HDX","available":true,"unitId":1,"ip":"99.7.7.132"},{"name":"研发六楼603","id":2187,"type":"HDX","available":true,"unitId":1,"ip":"99.1.113.61"}]依赖包是gson-2.2.4.jar
    debug运行结果:第0组:
    id:255 type:MONITOR ip:99.7.7.243 name:rpd unitid:1 available:true
    第1组:
    id:1873 type:MONITOR ip:99.7.7.233 name:jiankong unitid:1 available:true
    第2组:
    id:259 type:MONITOR ip:99.7.7.241 name:monitor rpd unitid:1 available:true
    第3组:
    id:174 type:HDX ip:99.7.7.134 name:总行1604V unitid:1 available:true
    第4组:
    id:2270 type:HDX ip:99.7.7.133 name:总行1603V unitid:1 available:true
    第5组:
    id:2268 type:HDX ip:99.7.7.132 name:总行1602V unitid:1 available:true
    第6组:
    id:2187 type:HDX ip:99.1.113.61 name:研发六楼603 unitid:1 available:true
    但是我将这些打成jar包就会出异常:Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.Illega
    lStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1
            at com.google.gson.Gson.fromJson(Gson.java:815)
            at com.google.gson.Gson.fromJson(Gson.java:768)
            at com.google.gson.Gson.fromJson(Gson.java:717)
            at com.calwan.test.testMain.main(testMain.java:75)
    Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING
    at line 1 column 1
            at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)
            at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.re
    ad(CollectionTypeAdapterFactory.java:79)
            at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.re
    ad(CollectionTypeAdapterFactory.java:60)
            at com.google.gson.Gson.fromJson(Gson.java:803)
            ... 3 more
    请问是哪里的问题
      

  5.   

    很奇怪,有的是因为list的问题http://www.iteye.com/topic/1131510 你直接一个试试。
      

  6.   

    试了,abc.txt只有一条信息,报同样的异常,不是list的问题
      

  7.   

    貌似是编码问题
    流读入的时候设置下编码utf-8,没异常
    br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));
      

  8.   

    楼主别用gson或者jackson了,不是存在依赖就是性能不好,建议使用阿里巴巴开源的fastjson
    文档
    另外,我也没明白,你打包是干什么?