关于List转JSONArray

关于List转JSONArray

下面是我servlet的代码

第一种

public class Data extends HttpServlet {

private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");


String music=request.getParameter("music");



List<String> list=new ArrayList<String>();

switch(music){

case "流行歌曲":

list.add("{name:稻香}");

list.add("{name:晴天}");

list.add("{name:告白气球}");

break;

case "经典歌曲":

list.add("{name:千千阙歌}");

list.add("{name:傻女}");

list.add("{name:七友}");

break;

case "摇滚歌曲":

list.add("{name:一块红布}");

list.add("{name:假行僧}");

list.add("{name:新长征路上的摇滚}");

break;

default:

break;

}


JSONObject jsonObject=new JSONObject(list);

response.getOutputStream().write(jsonObject.toString().getBytes("utf-8"));

}

第二种

public class Data extends HttpServlet {

private static final long serialVersionUID = 1L;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");


String music=request.getParameter("music");



List<Music> list=new ArrayList<Music>();

switch(music){

case "流行歌曲":

list.add(new Music("稻香"));

list.add(new Music("晴天"));

list.add(new Music("告白气球"));

break;

case "经典歌曲":

list.add(new Music("千千阙歌"));

list.add(new Music("傻女"));

list.add(new Music("七友"));

break;

case "摇滚歌曲":

list.add(new Music("一块红布"));

list.add(new Music("假行僧"));

list.add(new Music("新长征路上的摇滚"));

break;

default:

break;

}


JSONArray jsonArray=new JSONArray(list);

response.getOutputStream().write(jsonArray.toString().getBytes("utf-8"));

}

一开始我用的第一种,在jsp里面取不到值,然后用的第二种,可以取到。

第一种为什么list里面直接添加String类型的参数取不到值呢

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

JSONObject需要的形式是:以花括号"{}"括起来,其元素要求为键值对,key必须为String类型的,而value则可为任意类型。key和value之间以":"表示映射关系,元素之间也是以逗号分隔

同学写成list集合的形式,它识别不了的。

而同学的再定义一个类存到集合中是用的JSONArray,所以可以取到,这两个不能混用哦

如果我的回答解决了你的问题,请采纳,祝学习愉快.

好帮手慕阿莹 2018-12-14 17:01:34

因为同学用的是集合,所以用JSONArray是可以取到的

如果想用JSONObject需要把json字符串写成这种键值对的形式才可以被读取出来。

http://img1.sycdn.imooc.com//climg/5c1371020001b3e707600317.jpg

选择其中一种就可以的。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 花陽親Go #1
    我上面第一种把String存到List里面为什么取不出来,为什么一定要再定义一个类存到List才行
    2018-12-14 19:35:39
提问者 花陽親Go 2018-12-14 14:52:50

前端代码

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Insert title here</title>

<style>

*{

margin:0;

padding:0;

}

#head{

text-align:center;

}

button{

width:33%;

height:33%;

}

.show{

text-align:center;

}

</style>


<script type="text/javascript" src="resource/js/jquery-3.3.1.js"></script>

</head>


<body id="main">


<div id="head">

<button value="流行歌曲">流行歌曲</button>

<button value="经典歌曲">经典歌曲</button>

<button value="摇滚歌曲">摇滚歌曲</button>

</div>

<script type="text/javascript">

$("button").click(function(){

$.ajax({

url:"/test/data",

type:"post",

data:{music:$(this).val()},

dataType:"json",

success:function(result){

$(".show").remove();

for(var i in result){

$("#main").append("<h1 class='show'>"+result[i].name+"</h1>");

}

}

})

});

</script>

</body>

</html>


chrismorgen 2018-12-14 14:44:57

你好同学,你的前端页面是如何写的呢?建议你将前端页面的代码也粘贴一下,注意不要粘贴到回复中,而是要粘贴到回答中,否则会失去代码格式,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师