ersul
ersul

Reputation: 21

parsing and reading a json array java

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

Upvotes: 2

Views: 1190

Answers (2)

Francis Bartkowiak
Francis Bartkowiak

Reputation: 1462

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();

Upvotes: 1

smali
smali

Reputation: 4805

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.

Upvotes: 0

Related Questions