Java查出的字符串如何返回成数组?
问题:
如图数据库存的varchar类型,r如何是返回的结果没有双引号?
控制器
@RequestMapping("/query") public List<HashMap<String, Object>> query() {
return service.list();
}
Service层
public List<HashMap<String, Object>> list() { sqlSession = MybatisUtil.getSqlSession();
MyMapper mapper = sqlSession.getMapper(MyMapper.class);
return mapper.getList();
}
Mapper
@Select("select * from tmp")List<HashMap<String, Object>> getList();
更新解决办法:
@RequestMapping("/convertString") public List<HashMap<String, Object>> convertString() {
String row = "[[110.201664,20.011946],[110.26742,19.892085],[110.237594,19.747553],[110.209732,19.935714]]";
HashMap<String, Object> map = new HashMap<>();
List<HashMap<String, Object>> list = new ArrayList<>();
map .put("stream", parse(row));
Gson gson = new Gson();
List res = gson.fromJson(row, List.class);
map .put("gson", res);
list.add(map);
return list;
}
public static double[][] parse(String rowStr) {
double[] items = Arrays.stream(rowStr.split("[\\[\\],\\s]+"))
.filter(s -> !s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray();
return IntStream.range(0, items.length / 2)
.mapToObj(i -> new double[] { items[i + i], items[i + i + 1] })
.toArray(double[][]::new);
}
回答:
库里存的应该就是一个字符串,使用数据库工具查看数据的时候是不需要加双引号显示的。但是取出来的若干行数据,转成 JSON 之后,str 中是保存的数据库取出来内容,也就是图左边看到的字符串。显然这个字符串本身也是 JSON 数据格式,所以这里有两种处理方法:
- 在服务端依次对其进行 JSON 反序列化,得到
double[][]
,再序列化成 JSON 给前端 - 直接返回给前端,由前端去反序列化
两种方式都行,关键是要跟前端协商好。当然如果后端需要使用坐标数据,那就必须在后端来处理了。
后端用 JSON 反序列化工具处理最简单。不过对于这种简单的格式,手工处理也未尝不可。不过每次写 Stream 的程序总是想吐槽 —— 真难用
package playground.sf.q1010000042241460;import java.util.Arrays;
import java.util.stream.IntStream;
public class Solution {
static final String row = "[[110.201664,20.011946],[110.26742,19.892085],[110.237594,19.747553],[110.209732,19.935714],[110.288754,19.99265],[110.170962,20.003081],[110.285858,20.010722],[110.285968,20.013942]]";
public static double[][] parse(String rowStr) {
var items = Arrays.stream(rowStr.split("[\\[\\],\\s]+"))
.filter(s -> !s.isEmpty())
.mapToDouble(Double::parseDouble)
.toArray();
return IntStream.range(0, items.length / 2)
.mapToObj(i -> new double[] { items[i + i], items[i + i + 1] })
.toArray(double[][]::new);
}
public static void main(String[] args) {
var result = parse(row);
System.out.println(Arrays.deepToString(result));
}
}
如果拿 Kotlin 来写要轻松得多
package playground.sf.q1010000042241460private const val row =
"[[110.201664,20.011946],[110.26742,19.892085],[110.237594,19.747553],[110.209732,19.935714],[110.288754,19.99265],[110.170962,20.003081],[110.285858,20.010722],[110.285968,20.013942]]"
private fun parse(rowStr: String): Array<DoubleArray> {
return rowStr.split("[\\[\\],\\s]+".toRegex())
.filter { it.isNotEmpty() }
.map { it.toDouble() }
.chunked(2)
.map { it -> it.toDoubleArray() }
.toTypedArray();
}
fun main(args: Array<String>) {
val result = parse(row)
println(result.contentDeepToString())
}
回答:
使用split再Arrasy.toString
回答:
因为库里面存的就是一个字符串,你这样直接拿出来返回到前端,那肯定还是一个字符串。
猜测你是想把字符串转成json数组
,这个数组里每一项又是一个数组,里面包含了两个字符串。那就在mapper.getList()之后,再遍历每一条记录,将str的值转换成List<List<String>>类型的列表
,再返回给前端即可
回答:
在service层遍历一下,Map的value值从字符串转换成数据即可。
以上是 Java查出的字符串如何返回成数组? 的全部内容, 来源链接: utcz.com/p/944604.html