从mongo中取出Long类型的数据时,我们可以看到其对应的json是这样的:
String str = "{"name":"张三","age":{"$numberLong":"1513094400000"}}";
很明显,原本应该是Long类型的数据,多了一个"$numberLong",这个是mongo对于long型数据做的存储操作,这样的数据不是我们想要的,接下来便对这类数据进行处理,我的做法是把json对象转为字符串,使用String类的方法,以{\"$numberLong\":\"作为匹配条件,把这部分给去掉,还原成我们想要的json字符串,上代码:
/**
* @ClassName Gril
* @Description TODO
* @Author Huarray
* @Date 2019/4/17 9:04
* @Version 1.0
**/
public class Gril {
private String name;
private Long age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getAge() {
return age;
}
public void setAge(Long age) {
this.age = age;
}
@Override
public String toString() {
return "Gril{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
import com.alibaba.fastjson.JSONObject;
import domain.Gril;
/**
* @ClassName TypeChange
* @Description 处理mongo中的Long类型数据
* @Author Huarray
* @Date 2019/4/17 9:05
* @Version 1.0
**/
public class TypeChange {
private static final String regex = "{\"$numberLong\":\"";
public static void main(String[] ages) {
String str = "{\"name\":\"张三\",\"age\":{\"$numberLong\":\"1513094400000\"}}";
StringBuffer stringBuffer = new StringBuffer();
dealString(stringBuffer, str);
Gril gril = JSONObject.parseObject(stringBuffer.toString(),Gril.class);
System.err.println(str);
System.out.println(stringBuffer);
System.out.println(gril);
}
/**
* @Author Huarray
* @Description 处理类
* @Date 9:19 2019/4/18
* @Param [stringBuffer, json]
* @return void
**/
public static void dealString(StringBuffer stringBuffer, String json) {
int index = json.indexOf(regex);
if (index > -1) {
stringBuffer.append(json.substring(0, index));
String send = json.substring(index + 16);
String time = send.substring(0, 13);
stringBuffer.append(time);
String data = send.substring(15);
if (data.indexOf(regex) != -1) {
dealString(stringBuffer, data);
} else {
stringBuffer.append(data);
}
} else {
stringBuffer.append(json);
}
}
}
结果:
{"name":"张三","age":{"$numberLong":"1513094400000"}}
{"name":"张三","age":1513094400000}
Gril{name='张三', age=1513094400000}