2013-05-20 35 views
6

Tôi đang gặp phải vấn đề lạ, tôi rất mới đối với Android và Json. Tôi đang tiêu thụ một WCF RESTful cho thấy một phản ứng json như thế này:org.codehaus.jackson.JsonParseException: Ký tự không mong muốn ('' (mã 65279/0xfeff)): dự kiến ​​giá trị hợp lệ

{"StatusCode":200,"Message":"","Result":{"Agencies":[],"Areas":[{"id":11,"area_name":"area 10","description":"updated 10","active":true},{"id":12,"area_name":"Area 11","description":"temp 11","active":true},{"id":13,"area_name":"Area 12","description":"temp12","active":true},{"id":14,"area_name":"area 13","description":"temp 13 3","active":true},{"id":7,"area_name":"Area 6","description":"temp6","active":true},{"id":8,"area_name":"area 7","description":"temp7","active":true},{"id":9,"area_name":"area 8","description":"temp 8","active":true},{"id":10,"area_name":"area 9","description":"temp 9","active":true},{"id":1,"area_name":"area1","description":"temp","active":true},{"id":3,"area_name":"area2","description":"temp2","active":true},{"id":4,"area_name":"area3","description":"asdddasdsa","active":true},{"id":5,"area_name":"area4","description":"dasdassad","active":true},{"id":6,"area_name":"area5","description":"temp5","active":true}],"Districts":[{"id":5,"district_name":"District 5","district_code":"1","description":"temp 5","area_id":8,"area_name":"area 7","active":true},{"id":4,"district_name":"district 4","district_code":"2","description":"temp 4","area_id":8,"area_name":"area 7","active":true},{"id":1,"district_name":"district 1","district_code":"1","description":"descrp","area_id":10,"area_name":"area 9","active":true},{"id":2,"district_name":"district 2","district_code":"1","description":"descrp","area_id":10,"area_name":"area 9","active":true},{"id":3,"district_name":"district 3","district_code":"1","description":"temp 3","area_id":5,"area_name":"area4","active":true}],"FacilityOccupacies":[{"id":1,"facility_name":"C","description":"Computer facility","active":true},{"id":2,"facility_name":"CA","description":"Adult correctional facility","active":true},{"id":3,"facility_name":"CJ","description":"Juvenile correctional facility","active":true},{"id":4,"facility_name":"GS","description":"Garage for operations support, including vehicle maintenance, repair or fuel depot","active":true},{"id":5,"facility_name":"GP","description":"Garage for parking","active":true},{"id":6,"facility_name":"I","description":"Light industrial facility","active":true},{"id":7,"facility_name":"L","description":"Library","active":true},{"id":8,"facility_name":"M","description":"Medical facilities such as clinics, infirmaries or hospitals","active":true},{"id":9,"facility_name":"N","description":"Non-categorized facility","active":true},{"id":10,"facility_name":"OM","description":"Office buildings where approximately 75% or more of occupants are senior level managers","active":true},{"id":11,"facility_name":"OS","description":"Office building","active":true},{"id":12,"facility_name":"SP","description":"Primary school","active":true},{"id":13,"facility_name":"SS","description":"Secondary school","active":true},{"id":14,"facility_name":"U","description":"University","active":true},{"id":15,"facility_name":"W","description":"Warehouse","active":true}],"FireSprinkler":[{"id":2,"fire_sprinkler":"N","description":"A lack of a fire sprinkler fire suppression system.","active":true},{"id":3,"fire_sprinkler":"P","description":"A partial fire sprinkler fire suppression system.","active":true},{"id":1,"fire_sprinkler":"Y","description":"A full fire sprinkler fire suppression system.","active":true}],"FoundSources":[{"id":1,"found_source_name":"COP","description":"Certificates of Participation","active":true},{"id":2,"found_source_name":"COSF","description":"Capital Outlay Stabilization Fund","active":true},{"id":6,"found_source_name":"Exempt","description":"Exempt From Rent","active":true},{"id":4,"found_source_name":"GF","description":"Capital Outlay Stabilization Fund","active":true},{"id":5,"found_source_name":"N/A","description":"Not Applicable","active":true},{"id":3,"found_source_name":"PLTO","description":"Private Lease-To-Own","active":true}],"Locations":[{"id":1,"location_name":"location 1","location_code":"1","description":"temp 1","district_id":3,"district_name":"district 3","active":true}],"MarshallSwift":[{"id":1,"class":"A","frame":"Structural steel columns and beams fire proofed with masonry, concrete, plaster, or other incombustible material.","floor":"Concrete or concrete covered steel deck, fire-proofed.","roof":"Concrete or concrete covered steel deck,fire-proofed.","walls":"Non-bearing curtain walls, masonry, concrete, metal, and glass panels, stone.","active":true},{"id":2,"class":"B","frame":"Reinforced concrete columns and beams.","floor":"Concrete or concrete covered steel deck, fire-proofed.","roof":"Concrete or concrete covered steel deck, fire-proofed.","walls":"Non-bearing curtain walls, masonry, concrete, metal, and glass panels, stone.","active":true},{"id":3,"class":"C","frame":"Structural steel columns and beams fire-proofed with masonry, concrete, plaster, or other incombustible material.","floor":"Concrete or concrete covered steel deck, fire-proofed.","roof":"Wood or steel joist, wood or steel deck.","walls":"Brick, concrete block, or tile masonry, tilt-up formed concrete.","active":true},{"id":4,"class":"D","frame":"Wood or steel studs in bearing wall, wood or steel skeleton frame.","floor":"Wood or steel floor joists or slabs on ground.","roof":"Wood or steel joist, wood or steel deck.","walls":"Almost any material except masonry or concrete. May have masonry veneer over steel or wood framing.","active":true},{"id":5,"class":"S","frame":"Steel – No fire protection.","floor":"Concrete","roof":"Steel – No fire protection.","walls":"Steel – No fire protection.","active":true}],"Profiles":[{"id":1,"profile_name":"Administrator","description":"System Administrator","active":true},{"id":2,"profile_name":"Inspector","description":"Building Inspector","active":true}],"ProjectCategories":[{"id":1,"category_name":"Fire/Life Safety","description":"Fire/Life Safety","active":true},{"id":2,"category_name":"HVAC","description":"HVAC","active":true},{"id":3,"category_name":"Infrastructure","description":"Infrastructure","active":true},{"id":4,"category_name":"Interior Renovation","description":"Interior Renovation","active":true},{"id":5,"category_name":"Shell","description":"Shell","active":true},{"id":6,"category_name":"Energy Consv","description":"Energy Consv","active":true},{"id":7,"category_name":"ADA Access","description":"ADA Access","active":true},{"id":8,"category_name":"Building Services","description":"Building Services","active":true},{"id":9,"category_name":"NONE","description":"NONE","active":true}],"Projects":[],"Structures":[]}} 

Tôi đang cố gắng deserialize nó vào một đối tượng phức tạp với Jackson 1.9.11.

Vì vậy, tôi sử dụng

đâu RawResult là một lớp học với một mẫu và RawCatalogs một lớp học của mình với đối tượng lồng nhau, nó được sử dụng để deserialize phản ứng một cách chính xác, nhưng bây giờ nó hiển thị lỗi trong tiêu đề.

Định nghĩa của các lớp học được này (không biết nếu thông tin của các lớp lồng nhau là cần thiết để hỗ trợ đầy đủ? Tôi nghĩ rằng tôi đã ánh xạ chúng rất tốt, chỉ cần đi để đăng importants cho rõ ràng)

import org.codehaus.jackson.annotate.JsonCreator; 
import org.codehaus.jackson.annotate.JsonIgnore; 
import org.codehaus.jackson.annotate.JsonProperty; 


final public class RawResult<T> { 

    private final Integer _StatusCode; 

    private final Boolean _Status; 

    private final String _Message; 

    private final T _Result; 

    public RawResult(Class<T> oClass) throws InstantiationException, IllegalAccessException 
    { 
     _StatusCode = null; 
     _Message = null; 
     _Result = BuildGeneric(oClass); 
     _Status = false; 

    } 

    @JsonCreator 
    public RawResult(
      @JsonProperty("StatusCode") Integer StatusCode, 
      @JsonProperty("Message") String Message, 
      @JsonProperty("Result") T Result) 
    { 
     _StatusCode = StatusCode; 
     _Message = Message; 
     _Result = Result; 
     _Status = StatusCode == 200; 
    } 

    private T BuildGeneric(Class<T> oClass) throws InstantiationException, 
    IllegalAccessException 
    { 
     return oClass.newInstance(); 
    } 

    /** 
    * @return the _StatusCode 
    */ 
    @JsonProperty("StatusCode") 
    public Integer get_StatusCode() { 
     return _StatusCode; 
    } 

    /** 
    * @return the _Message 
    */ 
    @JsonProperty("Message") 
    public String get_Message() { 
     return _Message; 
    } 

    /** 
    * @return the _Result 
    */ 
    @JsonProperty("Result") 
    public T get_Result() { 
     return _Result; 
    } 

    /** 
    * @return the _Status 
    */ 
    @JsonIgnore 
    public Boolean get_Status() { 
     return _Status; 
    } 

} 

public interface ICatalog { 

    String _Id = null; 
    String _Description = null; 
    boolean _Active = false; 

    /** 
    * @return the _Id 
    */ 
    public String get_Id(); 

    /** 
    * @return the _Description 
    */ 
    public String get_Description() ; 


    /** 
    * @return the _Active 
    */ 
    public boolean is_Active() ; 
} 

public abstract class RawCatalog implements ICatalog { 


    protected final String _Id; 
    protected final String _Description; 
    protected final String _Name; 
    protected final boolean _Active; 


    public RawCatalog(String Id, String Description,String Name, boolean Active) 
    { 
     _Id = Id; 
     _Description = Description; 
     _Name = Name; 
     _Active = Active; 

    } 

    @JsonProperty("id") 
    public String get_Id() { 
     // TODO Auto-generated method stub 
     return _Id; 
    } 

    @JsonProperty("description") 
    public String get_Description() { 
     // TODO Auto-generated method stub 
     return _Description; 
    } 

    @JsonProperty("name") 
    public String get_Name() { 
     // TODO Auto-generated method stub 
     return _Name; 
    } 

    @JsonProperty("active") 
    public boolean is_Active() { 
     // TODO Auto-generated method stub 
     return _Active; 
    } 

} 

public final class RawAgency extends RawCatalog { 

    private final String _AgencyCode; 
    private final String _LocationId; 
    private final String _LocationName; 
    private final int _NumberOfStructures; 

    @JsonCreator 
    public RawAgency(
      @JsonProperty("id") String Id, 
      @JsonProperty("description") String Description, 
      @JsonProperty("agency_name") String Name, 
      @JsonProperty("active") Boolean Active,   
      @JsonProperty("agency_code") String AgencyCode, 
      @JsonProperty("get_LocationId") String LocationId, 
      @JsonProperty("get_LocationName") String LocationName, 
      @JsonProperty("get_NumberOfStructures") int NumberOfStructures 
      ) 
    { 
     super(Id, Description, Name,Active);   
     _AgencyCode = AgencyCode; 
     _LocationId = LocationId; 
     _LocationName = LocationName; 
     _NumberOfStructures = NumberOfStructures; 
    } 

    /** 
    * @return the _AgencyName 
    */ 
    @JsonProperty("agency_name") 
    @Override 
    public String get_Name() { 
     return super.get_Name(); 
    } 

    /** 
    * @return the _AgencyCode 
    */ 
    @JsonProperty("agency_code") 
    public String get_AgencyCode() { 
     return _AgencyCode; 
    } 

    /** 
    * @return the _LocationId 
    */ 
    @JsonProperty("location_id") 
    public String get_LocationId() { 
     return _LocationId; 
    } 

    /** 
    * @return the _NumberOfStructures 
    */ 
    @JsonProperty("number_of_structures") 
    public int get_NumberOfStructures() { 
     return _NumberOfStructures; 
    } 

    /** 
    * @return the _LocationName 
    */ 
    @JsonProperty("location_name") 
    public String get_LocationName() { 
     return _LocationName; 
    } 

} 

import java.util.List; 

import org.codehaus.jackson.annotate.JsonCreator; 
import org.codehaus.jackson.annotate.JsonProperty; 


final public class RawCatalogs { 


    private final List<RawAgency> _Agencies; 

    private final List<RawArea> _Areas; 

    private final List<RawDistrict> _Districts; 

    private final List<RawFacilityOccupacy> _FacilityOccupacies; 

    private final List<RawFireSprinkler> _FireSprinklers; 

    private final List<RawFoundSources> _FoundSources; 

    private final List<RawLocation> _Locations; 

    private final List<RawMarshallSwift> _MarshallSwifts; 

    private final List<RawProfile> _Profiles; 

    private final List<RawProjectCategory> _ProjectCategories; 

    private final List<RawProject> _Projects; 

    private final List<RawStructure> _Structures; 

    @JsonCreator 
    public RawCatalogs( 
      @JsonProperty("Agencies") List<RawAgency> Agencies, 
      @JsonProperty("Areas") List<RawArea> Areas, 
      @JsonProperty("Districts") List<RawDistrict> Districts, 
      @JsonProperty("FacilityOccupacies") List<RawFacilityOccupacy> FacilityOccupacies, 
      @JsonProperty("FireSprinkler") List<RawFireSprinkler> FireSprinklers, 
      @JsonProperty("FoundSources") List<RawFoundSources> FoundSources, 
      @JsonProperty("Locations") List<RawLocation> Locations, 
      @JsonProperty("MarshallSwift") List<RawMarshallSwift> MarshallSwifts, 
      @JsonProperty("Profiles") List<RawProfile> Profiles, 
      @JsonProperty("ProjectCategories") List<RawProjectCategory> ProjectCategories, 
      @JsonProperty("Projects") List<RawProject> Projects, 
      @JsonProperty("Structures") List<RawStructure> Structures 
      ) 
    { 
     _Agencies = Agencies; 
     _Areas = Areas; 
     _Districts = Districts; 
     _FacilityOccupacies = FacilityOccupacies; 
     _FireSprinklers = FireSprinklers; 
     _FoundSources = FoundSources; 
     _Locations = Locations; 
     _MarshallSwifts = MarshallSwifts; 
     _Profiles = Profiles; 
     _ProjectCategories = ProjectCategories; 
     _Projects = Projects; 
     _Structures = Structures; 
    } 

    /** 
    * @return the _Agencies 
    */ 
    @JsonProperty("Agencies") 
    public List<RawAgency> get_Agencies() { 
     return _Agencies; 
    } 

    /** 
    * @return the _Areas 
    */ 
    @JsonProperty("Areas") 
    public List<RawArea> get_Areas() { 
     return _Areas; 
    } 

    @JsonProperty("Districts") 
    /** 
    * @return the _Districts 
    */ 
    public List<RawDistrict> get_Districts() { 
     return _Districts; 
    } 

    /** 
    * @return the _FacilityOccupacies 
    */ 
    @JsonProperty("FacilityOccupacies") 
    public List<RawFacilityOccupacy> get_FacilityOccupacies() { 
     return _FacilityOccupacies; 
    } 

    /** 
    * @return the _FireSprinklers 
    */ 
    @JsonProperty("FireSprinkler") 
    public List<RawFireSprinkler> get_FireSprinklers() { 
     return _FireSprinklers; 
    } 

    /** 
    * @return the _FoundSources 
    */ 
    @JsonProperty("FoundSources") 
    public List<RawFoundSources> get_FoundSources() { 
     return _FoundSources; 
    } 

    /** 
    * @return the _Locations 
    */ 
    @JsonProperty("Locations") 
    public List<RawLocation> get_Locations() { 
     return _Locations; 
    } 

    /** 
    * @return the _MarshallSwifts 
    */ 
    @JsonProperty("MarshallSwift") 
    public List<RawMarshallSwift> get_MarshallSwifts() { 
     return _MarshallSwifts; 
    } 

    /** 
    * @return the _Profiles 
    */ 
    @JsonProperty("ProjectCategories") 
    public List<RawProfile> get_Profiles() { 
     return _Profiles; 
    } 

    /** 
    * @return the _ProjectCategories 
    */ 
    @JsonProperty("Profiles") 
    public List<RawProjectCategory> get_ProjectCategories() { 
     return _ProjectCategories; 
    } 

    /** 
    * @return the _Projects 
    */ 
    @JsonProperty("Projects") 
    public List<RawProject> get_Projects() { 
     return _Projects; 
    } 

    /** 
    * @return the _Structures 
    */ 
    @JsonProperty("Structures") 
    public List<RawStructure> get_Structures() { 
     return _Structures; 
    } 
} 

Vì vậy, câu hỏi của tôi là tại sao Nó hiển thị lỗi đó? Tôi đã tìm kiếm các câu hỏi tương tự trên stackoverflow, tất cả dường như về một lỗi mã hóa nhưng không phải là lỗi mã tương tự và tôi cũng không kiểm soát được WCF.

Thực ra Nếu tôi sao chép dán Json Respone vào this page thì có vẻ như nó đã được tạo thành.

Tôi cũng cố gắng sử dụng mapper.configure nhưng không ai trong số các tính năng của Jsonparser làm việc

Tôi đang làm gì sai?

+0

không phải là vấn đề với mã hóa json http://jsonlint.com/ – Milan

+0

Trong đoạn mã đầu tiên bạn tham chiếu biến 'strResponse', biến đó được xác định ở đâu? Nó trông giống như một vấn đề mã hóa với tôi quá, trong khi Json bạn đăng được phân tích cú pháp với một mã hóa sai. Sự không khớp giữa các UTF khác nhau (8/16/32) cho thấy một lỗi tương tự. –

+0

strResponse là tất cả JSON ở trên, tôi có thêm một chút mã, phải hữu ích? Tôi nhận được phản hồi bằng cách sử dụng HttpClient, và đó là những gì tôi nhận được bằng cách sử dụng 'cuối cùng HttpEntity oEntity = oHttpResponse.getEntity(); \t \t Chuỗi cuối cùng strResponse = EntityUtils.toString (oEntity); ' –

Trả lời

1

Tôi gặp lỗi tương tự khi đọc tệp JSON.

Hoặc bạn đảm bảo rằng bạn nhận được phản hồi từ WCF RESTful của bạn mà không có 0xfeff ban đầu này hoặc bạn xóa nó trước khi gửi nó đến trình phân tích cú pháp JSON. Có thể trim() có thể làm thủ thuật ...

+1

Trên thực tế WCF đã gửi nó với BOM như @ nhận thức cho biết, tôi có thể tách nó ra khỏi nó và nó hoạt động như một sự quyến rũ sau đó, cảm ơn –

Các vấn đề liên quan