我得到一个JsonString:
{
"student[0].firstName":"asdf",
"student[0].lastName":"sfd",
"student[0].gender":"1",
"student[0].foods":[
"Steak",
"Pizza"
],
"student[0].quote":"Enter your favorite quote!",
"student[0].education":"Jr.High",
"student[0].tOfD":"Day",
"student[1].firstName":"sf",
"student[1].lastName":"sdf",
"student[1].gender":"1",
"student[1].foods":[
"Pizza",
"Chicken"
],
"student[1].quote":"Enter your favorite quote!",
"student[1].education":"Jr.High",
"student[1].tOfD":"Night"
}
学生豆:
public class Student {
private String firstName;
private String lastName;
private Integer gender;
private List<String> foods;
private String quote;
private String education;
private String tOfD;
getXxx()...;
setXxx()...;
}
我想使用杰克逊将JsonString转换为List。
实际上,我想在一种表单中发布两种表单内容,请使用ajax。在SpringMVC处理程序方法中,我想获取类似List或Student []类型的参数,然后直接使用。我希望spring可以解决它,或使用其他util jar来做到这一点。
<form action="" method="post">
First Name:<input type="text" name="student[0].firstName" maxlength="12" size="12"/> <br/>
Last Name:<input type="text" name="student[0].lastName" maxlength="36" size="12"/> <br/>
Gender:<br/>
Male:<input type="radio" name="student[0].gender" value="1"/><br/>
Female:<input type="radio" name="student[0].gender" value="0"/><br/>
Favorite Food:<br/>
Steak:<input type="checkbox" name="student[0].foods" value="Steak"/><br/>
Pizza:<input type="checkbox" name="student[0].foods" value="Pizza"/><br/>
Chicken:<input type="checkbox" name="student[0].foods" value="Chicken"/><br/>
<textarea wrap="physical" cols="20" name="student[0].quote" rows="5">Enter your favorite quote!</textarea><br/>
Select a Level of Education:<br/>
<select name="student[0].education">
<option value="Jr.High">Jr.High</option>
<option value="HighSchool">HighSchool</option>
<option value="College">College</option>
</select><br/>
Select your favorite time of day:<br/>
<select size="3" name="student[0].tOfD">
<option value="Morning">Morning</option>
<option value="Day">Day</option>
<option value="Night">Night</option>
</select>
First Name:<input type="text" name="student[1].firstName" maxlength="12" size="12"/> <br/>
Last Name:<input type="text" name="student[1].lastName" maxlength="36" size="12"/> <br/>
Gender:<br/>
Male:<input type="radio" name="student[1].gender" value="1"/><br/>
Female:<input type="radio" name="student[1].gender" value="0"/><br/>
Favorite Food:<br/>
Steak:<input type="checkbox" name="student[1].foods" value="Steak"/><br/>
Pizza:<input type="checkbox" name="student[1].foods" value="Pizza"/><br/>
Chicken:<input type="checkbox" name="student[1].foods" value="Chicken"/><br/>
<textarea wrap="physical" cols="20" name="student[1].quote" rows="5">Enter your favorite quote!</textarea><br/>
Select a Level of Education:<br/>
<select name="student[1].education">
<option value="Jr.High">Jr.High</option>
<option value="HighSchool">HighSchool</option>
<option value="College">College</option>
</select><br/>
Select your favorite time of day:<br/>
<select size="3" name="student[1].tOfD">
<option value="Morning">Morning</option>
<option value="Day">Day</option>
<option value="Night">Night</option>
</select>
<p><input type="submit"/></p>
您的JSON(如果它表示学生的集合)应类似于以下内容。不同之处在于这是一个表示为JSON数组的学生集合(与单体学生,学生2对象等相对)
[
{
"firstName": "asdf",
"lastName": "sfd",
"gender": "1",
"foods": [
"Steak",
"Pizza"
],
"quote": "Enter your favorite quote!",
"education": "Jr.High",
"tOfD": "Day"
},
{
"firstName": "sf",
"lastName": "sdf",
"gender": "1",
"foods": [
"Pizza",
"Chicken"
],
"quote": "Enter your favorite quote!",
"education": "Jr.High",
"tOfD": "Night"
}
]
如果是这种结构,则使用Google的GSON库可以一次转换为bean
Gson gson = new Gson();
Student[] student = gson.fromJson(<your string here>, Student[].class);
现在是棘手的部分,我有一个上游系统,该系统使用某种字符串函数,而不是使用JSON库,并且可以按您提供的方式封装JSON。您将不得不使用大量的字符串操作,并且希望上面的格式在任何从源中提供数据的人的toString()表示中都不会改变(Joshua Bloch在《有效的Java》中有一个很好的最佳实践)一)。
尽管如此,我正在发布一段有效的代码(但绝不能以任何形式的生产质量代码使用)。可以将其作为单个正则表达式进行汇总,出于可读性考虑,它并未完成。只能将其用于理解,因为更大的集合可以很快使事情停顿。您还可以像JACKSON一样探索Streaming JSON解析器,并一次将其设为一个元素,我已将其故意保留为练习。希望这可以帮助
Gson gson = new Gson();
String jsonInString = "{\"student[0].firstName\": \"asdf\",\"student[0].lastName\": \"sfd\",\"student[0].gender\": \"1\",\"student[0].foods\":[\"Steak\",\"Pizza\"],\"student[0].quote\": \"Enter your favorite quote!\",\"student[0].education\": \"Jr.High\",\"student[0].tOfD\": \"Day\",\"student[1].firstName\": \"sf\",\"student[1].lastName\": \"sdf\",\"student[1].gender\": \"1\",\"student[1].foods\": [\"Pizza\",\"Chicken\"],\"student[1].quote\": \"Enter your favorite quote!\",\"student[1].education\": \"Jr.High\",\"student[1].tOfD\": \"Night\"}";
String jsonWithoutArrayIndices = jsonInString.replaceAll("\\[\\d\\]", "").replaceAll("student.","");
String jsonAsCollection = "[" + jsonWithoutArrayIndices + "]";
String jsonAsValidCollection = jsonAsCollection.replaceAll(",\"student.firstName\"","},{\"student.firstName\"");
System.out.println(jsonAsValidCollection);
Student[] students = gson.fromJson(jsonAsValidCollection, Student[].class);
System.out.println("-----------------------------------------------");
System.out.println(students[0]);
System.out.println("-----------------------------------------------");
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句