1

Hi I have Java class which will read &parse the JSON data from file and insert into DB,they are storing NAME,AGE and PHONE. The program is working fine;But my requirement is ,I have a different JSON data which needs to do same operation,I want to store AGE,ID and TYPE.I have mentioned my JSON data in the last part

I got this code from the https://javapages4all.wordpress.com/2012/12/10/read-from-json-file-and-persist-into-mysql/

test.json:

{'profiles':[
{'name':'Girish', 'age': 44, 'phone':'203-203-2030'},
{'name':'Alex','age':31, 'phone':'203-203-2030'},
{'name':'Amy', 'age': 24, 'phone':'203-203-2030'},
{'name':'Melissa','age':21, 'phone':'203-203-2030'}
]
}

Java Class:

package com.sample.json;


import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.commons.io.IOUtils;

public class MyJson {
    private static String tableName = "jsontest";

    public static void main(String[] args) {
        try {
            ClassLoader cl = MyJson.class.getClassLoader();
            InputStream is = cl.getResourceAsStream("test.json");
            String str = IOUtils.toString(is);
            JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(str);
            System.out.println(jsonObject);
            JSONArray jsonArr = jsonObject.getJSONArray("profiles");
            JSONObject obj = null;
            JSONArray nameArr = null;
            JSONArray valArr = null;

            for (int i = 0; i < jsonArr.size(); i++) {
                obj = jsonArr.getJSONObject(i);
                nameArr = obj.names();
                valArr = obj.toJSONArray(nameArr);
                //saveRecord(nameArr, valArr);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void saveRecord(JSONArray nameArray, JSONArray valArray) {
        Connection conn = getConnection();
        StringBuffer sb = new StringBuffer("insert into " + tableName + "(");
        int size = nameArray.size();
        int count = 0;
        Iterator<Object> iterator = nameArray.iterator();

        while (iterator.hasNext()) {
            if (count < (size - 1))
                sb.append(iterator.next() + ",");
            else
                sb.append(iterator.next() + ")");
            count++;
        }
        sb.append(" values(");

        for (int i = 0; i < size; i++) {
            if (i < (size - 1))
                sb.append("?,");
            else
                sb.append("?)");
        }
        System.out.println(sb.toString());
        try {
            PreparedStatement pstmt = conn.prepareStatement(sb.toString());
            bindVariables(valArray, pstmt);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    private static void bindVariables(JSONArray valArray,
            PreparedStatement pstmt) throws SQLException {
        Iterator<Object> iterator = valArray.iterator();
        int cnt = 0;
        while (iterator.hasNext()) {
            Object obj = iterator.next();
            if (obj instanceof String) {
                pstmt.setString(++cnt, (String) obj);
            } else if (obj instanceof Integer) {
                pstmt.setLong(++cnt, (Integer) obj);
            } else if (obj instanceof Long) {
                pstmt.setLong(++cnt, (Long) obj);
            } else if (obj instanceof Double) {
                pstmt.setDouble(++cnt, (Double) obj);
            }
        }
    }

    private static Connection getConnection() {
        Connection con = null;
        String url = "jdbc:mysql://localhost:3306/";
        String db = "jsondata";
        String driver = "com.mysql.jdbc.Driver";
        String user = "root";
        String pass = "root";
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url + db, user, pass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }
}

My JSON:

[{"emp":{"age":34,"ID":3423423},"type":"s"}, 
{"emp":{"age":43,"ID":324324235},"type":"s"}, 
{"emp":{"age":36,"ID":324324236},"type":"v"},
{"emp":{"age":46,"ID":324324238},"type":"s"},
{"emp":{"age":55,"ID":324324243},"type":"s"},
{"emp":{"age":44,"ID":324324287},"type":"s"}]

for the above program i want to use this JSON data

10
  • 2
    No, after parsing you'll get objects - you may then want to reformat to that format... although it's unclear why you're not using JSON in the second example. (JSON strings always use double quotes, as far as I can see in the spec.) Commented Jul 1, 2015 at 6:26
  • Actually am looking for logic to fetch only Age ,ID and Type Commented Jul 1, 2015 at 6:31
  • 2
    Right, so that's all you should ask about - your question doesn't say that at all at the moment. Next, show us what you've already tried - there are lots of resources about parsing JSON on the web, so it's not like you should have problems getting started. Please show a short but complete program showing what you've got so far, and indicating the problem. Commented Jul 1, 2015 at 6:32
  • Age is an object that you can fetch directly. Why you need the second thing? Commented Jul 1, 2015 at 6:32
  • @jon Skeet : javapages4all.wordpress.com/2012/12/10/… the link to parse and insert data into DB ;I tried this and working fine ,But actually my JSON data is different ;So in order to match for above example(which is in the link) I wanted to parse the data in the same way Commented Jul 1, 2015 at 6:39

3 Answers 3

2

I made a simple example for your case using Gson for parsing json.

public class Result {
    private long id;
    private int age;
    private String type;

    public Result(long id, int age, String type) {
        this.age = age;
        this.id = id;
        this.type = type;
    }
}

public class EmployeeInfo {
    private int age;
    @SerializedName("ID")
    private long id;

    public EmployeeInfo(int age, long id) {
        this.age = age;
        this.id = id;
    }
}

public class Employee {
    @SerializedName("emp")
    private EmployeeInfo employeeInfo;
    private String type;

    public Employee(EmployeeInfo employeeInfo, String type) {
        this.employeeInfo = employeeInfo;
        this.type = type;
    }
}

Run:

public static void main(String[] args) throws IOException {
    String json = "[{\"emp\":{\"age\":34,\"ID\":3423423},\"type\":\"s\"}, \n" +
            "{\"emp\":{\"age\":43,\"ID\":324324235},\"type\":\"s\"}, \n" +
            "{\"emp\":{\"age\":36,\"ID\":324324236},\"type\":\"v\"},\n" +
            "{\"emp\":{\"age\":46,\"ID\":324324238},\"type\":\"s\"},\n" +
            "{\"emp\":{\"age\":55,\"ID\":324324243},\"type\":\"s\"},\n" +
            "{\"emp\":{\"age\":44,\"ID\":324324287},\"type\":\"s\"}]";

    Gson gson = new Gson();
    Type type = new TypeToken<List<Employee>>() {
    }.getType();
    List<Employee> employees = gson.fromJson(json, type);
    List<Result> results = new ArrayList<>();

    Result result;
    for (Employee employee : employees) {
        result = new Result(employee.getEmployeeInfo().getId(), employee.getEmployeeInfo().getAge(), employee.getType());

        results.add(result);
    }

    System.out.println(gson.toJson(results));

}
Sign up to request clarification or add additional context in comments.

Comments

1

Try this

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

public class GetDataFromJSON {
public static void main(String[] args) {
    String json = "[{\"emp\":{\"age\":34,\"ID\":3423423},\"type\":\"s\"},"
            + "{\"emp\":{\"age\":43,\"ID\":324324235},\"type\":\"s\"},"
            + "{\"emp\":{\"age\":36,\"ID\":324324236},\"type\":\"v\"},"
            + "{\"emp\":{\"age\":46,\"ID\":324324238},\"type\":\"s\"},"
            + "{\"emp\":{\"age\":55,\"ID\":324324243},\"type\":\"s\"},"
            + "{\"emp\":{\"age\":44,\"ID\":324324287},\"type\":\"s\"}]";
    JSONArray jsonArray = getDesiredJSONArray(json);
    System.out.println(jsonArray);
}

public static JSONArray getDesiredJSONArray(String json) {
    JSONArray jsonArray = null;
    JSONArray desiredJsonArray = new JSONArray();
    try {
        jsonArray = new JSONArray(json);
        for (int i = 0; i < jsonArray.length(); i++) {
            // System.out.println(jsonArray.get(i));
            JSONObject object = new JSONObject(jsonArray.get(i).toString());
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("type", object.get("type"));
            object = new JSONObject(object.get("emp").toString());
            jsonObject.put("ID", object.get("ID"));
            jsonObject.put("age", object.get("age"));
            desiredJsonArray.put(jsonObject);
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return desiredJsonArray;
}
}

10 Comments

It's the complete answer :) (y)
Thanks Soheil Setayeshi
@Rakesh Good Have you tried the solution i have created?
The constructor JSONObject(String) is undefined
which api you are using?
|
1

To do that you must first pars it and save its values somewhere then create a JSON object with desired format and set its values by parsed values from first stage. for example in Android/Java:

ArrayList<YourDataNode> arrayList = new ArrayList<>();
    for (int i=0 ; i<jsonArray.length() ; i++) {
        JSONObject jsonObject = jsonArray.get(i);
        JSONObject empObject = jsonObject.getJSONObject("emp");
        String type = jsonObject.getString("type");
        int age = empObject.getInt("age");
        long id = empObject.getLong("id");
        YourDataNode temp = new (id, age, type);
        arrayList.add(temp);
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.