have a structure for a contact book:
Contact { "Name":{ "First name":"Erm","Last Name": "Smith" }, "Number":67485647 }.
I save it as a Json object and than store it in a file with createContact().
public synchronized void createContact (String fname, String lname,String typeof, int number) throws FileNotFoundException
{
JsonObjectBuilder contactBuilder = Json.createObjectBuilder();
JsonObjectBuilder nameBuilder = Json.createObjectBuilder();
JsonArrayBuilder contactArrayBuilder= Json.createArrayBuilder();
nameBuilder.add("First Name",fname);
nameBuilder.add("Last Name",lname);
contactBuilder.add("Name", nameBuilder);
contactBuilder.add("Type", typeof);
contactBuilder.add("number", number);
JsonObject contact = contactBuilder.build();
contactArrayBuilder.add(contact);
JsonArray contactArray=contactArrayBuilder.build();
//write to file
OutputStream os = new FileOutputStream(filename);
JsonWriter fileWriter = Json.createWriter(os);
fileWriter.writeArray(contactArray);
fileWriter.close();
}
I read the file with:
InputStream is = new FileInputStream(filename);
JsonReader fileReader = Json.createReader(is);
JsonArray contactObj = (JsonArray) Json.createParserFactory(fileReader.readObject());
JsonArrayBuilder contactArrayBuilder= Json.createArrayBuilder();
This is when I get the error
javax.json.JsonException: Cannot read JSON object, found JSON array
at org.glassfish.json.JsonReaderImpl.readObject(JsonReaderImpl.java:105)
I am using javax.json
2 Answers 2
The problem is that you are storing a JsonArray in that file, and then trying to read that JsonArray as a JsonObject. What you can do to get your code to work is remove these lines:
JsonArray contactObj = (JsonArray) Json.createParserFactory(fileReader.readArray());
JsonArrayBuilder contactArrayBuilder= Json.createArrayBuilder();
and replace them with something like this:
JsonArray array = fileReader.readArray();
In the end, reading the file will look like this:
InputStream is = new FileInputStream(filename);
JsonReader fileReader = Json.createReader(is);
JsonArray array = fileReader.readArray();
answered Jan 11, 2018 at 13:38
Francis Bartkowiak
1,4762 gold badges15 silver badges32 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
Change this line
JsonArray contactObj = (JsonArray) Json.createParserFactory(fileReader.readObject());
to this
JsonArray contactObj = (JsonArray) Json.createParserFactory(fileReader.readArray());
as you are expecting an array but reading the object you are getting this error.
answered Jan 11, 2018 at 12:06
smali
4,8537 gold badges42 silver badges67 bronze badges
3 Comments
ersul
If I do it like you suggest I get an error because createParserFactory does not take an array argument. If I do it like this: JsonArray contactObj = (JsonArray) Json.createParser((Reader) fileReader.readArray()); This dos not give an error, but is it a correct way to do it?
ersul
No I get the same error if I do that in the above comment
smali
You can just do
JsonArray contactObj = fileReader.readArray(); and it should work I thinklang-java