2013-05-20 12 views
6

Sono di fronte a un problema strano, sono molto nuovo per Android e Json. Sto consumando una WCF RESTful che mostra una risposta JSON come questo:org.codehaus.jackson.JsonParseException: Carattere imprevisto ('' (codice 65279/0xfeff)): è previsto un valore valido

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

Sto cercando di deserializzare ad un oggetto complesso con Jackson 1.9.11.

per cui uso

Dove RawResult è una classe con un modello e RawCatalogs sua una classe con oggetti nidificati, ha usato per deserializzare correttamente la risposta, ma ora sta mostrando l'errore nel titolo.

La definizione delle classi è questo (non so se sono necessarie informazioni delle classi nidificate per un pieno supporto? Credo che le ho tracciato molto bene, solo andando a postare le importants per chiarezza)

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

Quindi la mia domanda è per questo che sta dimostrando che l'errore? Ho cercato domande simili sullo stackoverflow, tutto sembrava relativo a un errore di codifica, ma non è lo stesso errore di codice e inoltre non ho il controllo sulla WCF.

In realtà Se si copia incolla il Json Respone in this page sembra ben formato.

Ho anche provato ad utilizzare il mapper.configure ma nessuna delle caratteristiche di Jsonparser lavorato

Che cosa sto facendo di sbagliato?

+0

non è un problema con la codifica json http://jsonlint.com/ – Milan

+0

Nel tuo primo frammento fai riferimento a una variabile 'strResponse', dove viene definita tale variabile? Anche a me sembra un problema di codifica, mentre il Json che hai postato viene analizzato con una codifica errata. Una mancata corrispondenza tra diversi UTF (8/16/32) mostra un errore simile. –

+0

lo strResponse è tutto il JSON sopra, ho un po 'più di codice, dovrebbe essere utile? Ottengo la risposta utilizzando HttpClient, e questo è quello che ottengo usando 'finale HttpEntity oEntity = oHttpResponse.getEntity(); \t \t final String strResponse = EntityUtils.toString (oEntity); ' –

risposta

1

Ho ricevuto lo stesso errore durante la lettura di un file JSON.

O si garantisce di ricevere una risposta dal WCF RESTful senza questo 0xfeff iniziale o lo si spoglia prima di inviarlo al parser JSON. Forse trim() potrebbe fare il trucco ...

+1

In realtà la WCF lo inviava con la distinta base come ha detto @perception, potevo spogliarla e dopo ha funzionato come un incantesimo, grazie –

Problemi correlati