Org.codehaus.jackson.JsonParseException: Unexpected character ('' (code 65279 / 0xfeff): a valid value is expected

I ran into a strange problem, I am very new to Android and Json. I am using RESTful WCF, which shows a json response similar to this:

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

I am trying to deserialize it to a complex object using Jackson 1.9.11.

Therefore i use

  final ObjectMapper mapper = new ObjectMapper(); RawResult<RawCatalogs> oResult = mapper.readValue(strResponse, new TypeReference<RawResult<RawCatalogs>>() {}); 

Where RawResult is a class with a template and RawCatalogs, its class with nested objects, it was used to deserialize the response correctly, but now it shows an error in the header.

The definition of classes is (I don’t know if information about nested classes is needed for full support? I think I outlined them very well, just sending importers for clarity)

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

So my question is why is it showing this error? I was looking for similar questions about stackoverflow, everything seemed to be about a coding error, but this is not the same code error, nor do I control WCF.

In fact, if I copy the Json Respone paste into this page , it seems well formed.

I also tried using mapper.configure, but none of the Jsonparser functions worked

What am I doing wrong?

+6
source share
1 answer

I got the same error as the JSON file.

Either you guarantee that you will receive a response from your RESTful WCF without this initial 0xfeff, or you will split it before sending it to the JSON parser. Maybe trim () can do the trick ...

+1
source

Source: https://habr.com/ru/post/945446/


All Articles