2013-05-20 16 views
6

Mam do czynienia z dziwnym problemem, jestem bardzo nowy w systemie Android i Json. Ja spożywania relaksującego WCF, który pokazuje odpowiedzi json jak ten:org.codehaus.jackson.JsonParseException: nieoczekiwany znak ('' (kod 65279/0xfeff)): oczekiwano prawidłowej wartości

{"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":[]}} 

próbuję deserializować go do obiektu złożonego z Jackson 1.9.11.

więc używam

Gdzie RawResult jest klasa z szablonem i RawCatalogs swoją klasę z obiektów zagnieżdżonych, kiedyś poprawnie deserializowania odpowiedzi, ale teraz to pokazuje błąd w tytule.

Definicja klasy jest to (nie wiem, czy informacje o zagnieżdżonych klas jest potrzebne do pełnego wsparcia? Myślę, że bardzo dobrze odwzorowane je, po prostu będzie zamieszczać importants dla jasności)

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; 
    } 
} 

Więc moje pytanie jest, dlaczego jest pokazywanie tego błędu? Szukałem podobnych pytań na stackoverflow, wszystko wydawało się o błędzie kodowania, ale nie jest to ten sam błąd kodu, a także nie mam kontroli nad WCF.

Właściwie Jeśli skopiuję wklej Json Respone w this page, wygląda na dobrze uformowany.

Próbowałem również użyć mapper.configure ale żadna z cech Jsonparser pracował

Co robię źle?

+0

nie jest problemem z kodowaniem json http://jsonlint.com/ – Milan

+0

W swoim pierwszym fragmencie odwołujesz się do zmiennej 'strResponse', gdzie jest ta zmienna zdefiniowana? Wygląda mi to na problem z kodowaniem, podczas gdy napisany przez ciebie Json jest przetwarzany z błędnym kodowaniem. Niezgodność między różnymi kodami UTF (8/16/32) pokazuje podobny błąd. –

+0

strResponse to wszystko powyższy JSON, mam nieco więcej kodu, powinien być pomocny? Otrzymuję odpowiedź za pomocą HttpClient, i to jest to, co otrzymuję za pomocą 'ostatecznej HttpEntity oEntity = oHttpResponse.getEntity(); \t \t końcowy strResponse = EntityUtils.toString (oEntity); ' –

Odpowiedz

1

Wystąpił ten sam błąd podczas odczytu pliku JSON.

Zapewniamy, że otrzymasz odpowiedź z RESTful WCF bez tego początkowego 0xfeff lub usuniesz ją przed wysłaniem do parsera JSON. Może trim() może zdziałać ...

+1

W rzeczywistości, WCF wysyłało go z BOM jako @perception, powiedziałem, że mogę go z niego usunąć i zadziałało jak wdzięk, dzięki –

Powiązane problemy