Java 以JSON格式打印hashmap内容

Java 以JSON格式打印hashmap内容,java,Java,我有一个hashmap,在其中我按一个人拥有的汽车的名称存储汽车列表 Map<String,List<String>> personCarMap = new HashMap<String,List<String>>(); Map personCarMap=newhashmap(); 键是person id,值是汽车名称列表。在值中,我还要存储购买日期。所有这些都是从数据库中获取的。如何在数据库中有两个不同列的键映射 这是我目前掌握的代码 pub

我有一个hashmap,在其中我按一个人拥有的汽车的名称存储汽车列表

Map<String,List<String>> personCarMap = new HashMap<String,List<String>>();
Map personCarMap=newhashmap();
键是person id,值是汽车名称列表。在值中,我还要存储购买日期。所有这些都是从数据库中获取的。如何在数据库中有两个不同列的键映射

这是我目前掌握的代码

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    Map<String,List<String>> personCarMap = new HashMap<String,List<String>>();
    JSONObject jObj = new JSONObject();
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet rs = null;        
    try {
        connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
        statement = connection.prepareStatement("select personId,car,purchase_date from carz where person = ?");
        rs = statement.executeQuery();          
        while(rs.next()) {  
            List<String> carIds;
            if(personCarMap.containsKey(rs.getString(carId))) {
                carIds = personCarMap.get(rs.getString(personId));
            } else {
                carIds = new ArrayList<String>();
            }               
            carIds.add(rs.getString(carId));
            carIds.add(rs.getTimestamp(purchase_date).toString()); //This is where I have a doubt.
            personCarMap.put(rs.getString(carId),carIds);           
        }
        for(Map.Entry<String, List<String>> personCarMapEntry:personCarMap.entrySet())
        {
            jObj.put("personID", personCarMapEntry.getKey());
            jObj.put("carID", personCarMapEntry.getValue());                
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}   
}
publicstaticjsonobjectfetchpersoncarinfo(stringperson)抛出SQLException
{
Map personCarMap=newhashmap();
JSONObject jObj=新的JSONObject();
连接=空;
PreparedStatement=null;
结果集rs=null;
试一试{
connection=DriverManager.getConnection(“jdbc:myDriver:myDatabase”、用户名、密码);
声明=连接。准备声明(“从carz选择个人ID、汽车、购买日期,其中个人=?”;
rs=语句。executeQuery();
while(rs.next()){
列出龋齿;
if(personCarMap.containsKey(rs.getString(carId))){
carIds=personCarMap.get(rs.getString(personId));
}否则{
carIds=newarraylist();
}               
添加(rs.getString(carId));
carIds.add(rs.getTimestamp(purchase_date.toString());//这就是我怀疑的地方。
personCarMap.put(rs.getString(carId),carId);
}
对于(Map.Entry personcarmpentry:personCarMap.entrySet())
{
put(“personID”,personcarmpentry.getKey());
jObj.put(“carID”,personcarmpentry.getValue());
}
}最后{
DatabaseFunctions.closeDBResources(null、语句、rs);
}       
返回jObj;
}   
}

我希望我的JSON对象显示{personId、[carId,purchasedate]}。请建议如何让JSON数组也打印出购买日期?我看到personId和carId的输出非常清晰,但我无法确定如何添加购买日期,因此需要您的专家建议

您需要使用具有两个属性carId和purchaseDate的自定义对象列表

Map<String,List<ClassNameOfCustomObject>> personCarMap = new HashMap<String,List<ClassNameOfCustomObject>>();
Map personCarMap=newhashmap();

通过这种方式,您可以将purchaseDate与carId一起存储在PersonCharmap中。

您需要使用具有两个属性carId和purchaseDate的自定义对象列表

Map<String,List<ClassNameOfCustomObject>> personCarMap = new HashMap<String,List<ClassNameOfCustomObject>>();
Map personCarMap=newhashmap();

通过这种方式,您可以将purchaseDate与carId一起存储在PersonCharmap中。

您需要使用具有两个属性carId和purchaseDate的自定义对象列表

Map<String,List<ClassNameOfCustomObject>> personCarMap = new HashMap<String,List<ClassNameOfCustomObject>>();
Map personCarMap=newhashmap();

通过这种方式,您可以将purchaseDate与carId一起存储在PersonCharmap中。

您需要使用具有两个属性carId和purchaseDate的自定义对象列表

Map<String,List<ClassNameOfCustomObject>> personCarMap = new HashMap<String,List<ClassNameOfCustomObject>>();
Map personCarMap=newhashmap();

这样,您就可以将purchaseDate和carId一起存储在PersonCharmap中。

我建议直接使用
JSONObject
。它有一些方便的方法

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    JSONObject jObj = new JSONObject();
    PreparedStatement statement = null;
    ResultSet rs = null;        
    try {
        Connection connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
        statement = connection.prepareStatement("SELECT personId, car, purchase_date FROM carz WHERE person = ?");
        statement.setString(1, person);
        rs = statement.executeQuery();
        while(rs.next()) {
            jObject.put("personId", rs.getString("personId");

            JSONObject purchase = new JSONObject();
            // there is no column with name carId in above query.
            purchase.put("carId", rs.getString("car");
            purchase.put("purchasedate", rs.getTimestamp("purchase_date").toString());  
            jObject.append("purchases", purchase);
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}
这将产生如下JSON:

{
    "personId": "ABC123",
    "purchases": [
        {"carId": "abc123", "purchasedate": "2013-01-01 00:00:00"},
        {"carId": "def456", "purchasedate": "2013-01-02 00:00:00"}
    ]
}

理解JSON的外观有点困难,但我认为就是这样。无论如何,这个JSON结构对于您的数据来说是一个很好的结构。

我建议直接使用
JSONObject
。它有一些方便的方法

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    JSONObject jObj = new JSONObject();
    PreparedStatement statement = null;
    ResultSet rs = null;        
    try {
        Connection connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
        statement = connection.prepareStatement("SELECT personId, car, purchase_date FROM carz WHERE person = ?");
        statement.setString(1, person);
        rs = statement.executeQuery();
        while(rs.next()) {
            jObject.put("personId", rs.getString("personId");

            JSONObject purchase = new JSONObject();
            // there is no column with name carId in above query.
            purchase.put("carId", rs.getString("car");
            purchase.put("purchasedate", rs.getTimestamp("purchase_date").toString());  
            jObject.append("purchases", purchase);
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}
这将产生如下JSON:

{
    "personId": "ABC123",
    "purchases": [
        {"carId": "abc123", "purchasedate": "2013-01-01 00:00:00"},
        {"carId": "def456", "purchasedate": "2013-01-02 00:00:00"}
    ]
}

理解JSON的外观有点困难,但我认为就是这样。无论如何,这个JSON结构对于您的数据来说是一个很好的结构。

我建议直接使用
JSONObject
。它有一些方便的方法

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    JSONObject jObj = new JSONObject();
    PreparedStatement statement = null;
    ResultSet rs = null;        
    try {
        Connection connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
        statement = connection.prepareStatement("SELECT personId, car, purchase_date FROM carz WHERE person = ?");
        statement.setString(1, person);
        rs = statement.executeQuery();
        while(rs.next()) {
            jObject.put("personId", rs.getString("personId");

            JSONObject purchase = new JSONObject();
            // there is no column with name carId in above query.
            purchase.put("carId", rs.getString("car");
            purchase.put("purchasedate", rs.getTimestamp("purchase_date").toString());  
            jObject.append("purchases", purchase);
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}
这将产生如下JSON:

{
    "personId": "ABC123",
    "purchases": [
        {"carId": "abc123", "purchasedate": "2013-01-01 00:00:00"},
        {"carId": "def456", "purchasedate": "2013-01-02 00:00:00"}
    ]
}

理解JSON的外观有点困难,但我认为就是这样。无论如何,这个JSON结构对于您的数据来说是一个很好的结构。

我建议直接使用
JSONObject
。它有一些方便的方法

public static JSONObject fetchPersonCarInfo(String person) throws SQLException
{
    JSONObject jObj = new JSONObject();
    PreparedStatement statement = null;
    ResultSet rs = null;        
    try {
        Connection connection = DriverManager.getConnection("jdbc:myDriver:myDatabase",username,password);
        statement = connection.prepareStatement("SELECT personId, car, purchase_date FROM carz WHERE person = ?");
        statement.setString(1, person);
        rs = statement.executeQuery();
        while(rs.next()) {
            jObject.put("personId", rs.getString("personId");

            JSONObject purchase = new JSONObject();
            // there is no column with name carId in above query.
            purchase.put("carId", rs.getString("car");
            purchase.put("purchasedate", rs.getTimestamp("purchase_date").toString());  
            jObject.append("purchases", purchase);
        }
    } finally{
        DatabaseFunctions.closeDBResources(null, statement, rs);
    }       
    return jObj;
}
这将产生如下JSON:

{
    "personId": "ABC123",
    "purchases": [
        {"carId": "abc123", "purchasedate": "2013-01-01 00:00:00"},
        {"carId": "def456", "purchasedate": "2013-01-02 00:00:00"}
    ]
}


理解JSON的外观有点困难,但我认为就是这样。无论如何,这个JSON结构对于您的数据来说是一个很好的结构。

您要求的是无效的JSON。也许
{personId:[carId,purchasedate]}
?是的,保罗。我的意思是,对于我现在拥有的,我得到了-{personId:12345 carID:[3456723456]},但对于我想要的,我需要-{personId:[carID,purchasedate]}你要求的是无效的JSON。也许
{personId:[carId,purchasedate]}
?是的,保罗。我的意思是,对于我现在拥有的,我得到了-{personId:12345 carID:[3456723456]},但对于我想要的,我需要-{personId:[carID,purchasedate]}你要求的是无效的JSON。也许
{personId:[carId,purchasedate]}
?是的,保罗。我的意思是,对于我现在拥有的,我得到了-{personId:12345 carID:[3456723456]},但对于我想要的,我需要-{personId:[carID,purchasedate]}你要求的是无效的JSON。也许
{personId:[carId,purchasedate]}
?是的,保罗。我的意思是,对于我现在拥有的,我得到了-{personId:12345 carID:[3456723456]},但是对于我想要的,我需要-{personId:[carID,purchasedate]}不,在我的例子中没有创建自定义对象的选项。那么,在这种情况下,你应该立即开始构建JSONObject,而不是构建中间映射。你需要类似这样的东西吗{“personId”:[{“carId”:““purchaseDate”:“}]}?此外,我建议首先测试您试图在Yes构建的json结构,我需要类似的东西。想法是,我需要carId和给定人员的汽车购买日期以及personId(方法参数为person)这个答案太复杂了。@singh.jagmohan在评论中正确地使用了JSONObject。不,在我的例子中没有创建自定义对象的选项。那么,在这种情况下,您应该立即开始构建JSONObject,而不是构建中介体