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.q1010000042241460

private 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

回到顶部