Roman
Roman

Reputation: 803

How to convert csv to json with arrays

I have a csv file with an initial data for my app.

csv file

    {
   "id": 1,
   "topic": "Архитектура",
   "question": "Как называется буддийское архитектурное культовое сооружение?",
   "rightanswer": "Ступа",
   "wronganswer1": "Баба",
   "wronganswer2": "Яга",
   "wronganswer3": "Метла",
   "passed": false,
   "right": false
 },

I need to parse it to json with the array of "answers", what options i have ?

Result should be like that :

 {
   "id": 1,
   "topic": "Архитектура",
   "question": "Как называется буддийское архитектурное культовое сооружение?",
   "answers":[
        "Ступа",
        "Баба",
        "Яга",
        "Метла" ],
   "passed": false,
   "right": false
 }

Upvotes: 1

Views: 4951

Answers (2)

Shivang Agarwal
Shivang Agarwal

Reputation: 1923

You are almost in the right direction but you have to use JSONArray for answers rather then adding them directly into the object with the name.

you can have an if where you will check if key contains the answer string then you can add into the JSONArray else add that key and value into JSONObject and add this JSONArray with the key answers into the main object once you done by adding all field.

This logic will keep your logic flexible.

it will help you to achieve your desire JSON.

EDIT: I would suggest you change your excel structure if you can. you should have all possible options in a single column (such as opt1,opt2,opt3,opt4) and correct answers in another column to gain simplicity and flexibility in your excel designa nd code.

Upvotes: 2

Dang Nguyen
Dang Nguyen

Reputation: 1209

I'm using gson

    String str = "{\r\n" + 
            "   \"id\": 1,\r\n" + 
            "   \"topic\": \"Архитектура\",\r\n" + 
            "   \"question\": \"Как называется буддийское архитектурное культовое сооружение?\",\r\n" + 
            "   \"rightanswer\": \"Ступа\",\r\n" + 
            "   \"wronganswer1\": \"Баба\",\r\n" + 
            "   \"wronganswer2\": \"Яга\",\r\n" + 
            "   \"wronganswer3\": \"Метла\",\r\n" + 
            "   \"passed\": false,\r\n" + 
            "   \"right\": false\r\n" + 
            " }"; //<== your json input

    JsonParser parser = new JsonParser();
    JsonObject input = parser.parse(str).getAsJsonObject(); //parser you Json to object
    JsonObject output =  new JsonObject();//my new jsonOutput
    output.add("id", input.get("id"));
    //other field .....

    //the trick start here
    JsonArray answer = new JsonArray();
    answer.add(input.get("rightanswer"));
    answer.add(input.get("wronganswer1"));
    answer.add(input.get("wronganswer2"));
    answer.add(input.get("wronganswer3"));
    output.add("answers", answer);

    System.out.println(output.toString());

result

{"id":1,"answers":["Ступа","Баба","Яга","Метла"]} // to lazy to parse other field sorry

Hope it helps

Upvotes: 1

Related Questions