java读取json文件的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java读取json文件的问题相关的知识,希望对你有一定的参考价值。
我现在 有个json文件,里面的内容如下:
[
text: '广州市',
cls: 'folder',
id:'4401',
children: [
text: '荔湾区',
id:'440103',
leaf: true
,
text: '越秀区',
id:'440104',
leaf: true
,
text: '海珠区',
id:'440105',
leaf: true
,
text: '天河区',
id:'440106',
leaf: true
,
text: '白云区',
id:'440111',
leaf: true
,
text: '黄埔区',
id:'440112',
leaf: true
,
text: '番禺区',
id:'440113',
leaf: true
,
text: '花都区',
id:'440114',
leaf: true
,
text: '萝岗区',
id:'440115',
leaf: true
,
text: '南沙区',
id:'440116',
leaf: true
,
text: '增城市',
id:'440183',
leaf: true
,
text: '从化市',
id:'440184',
leaf: true
]
,
text: '深圳市',
cls: 'folder',
id:'4403',
children: [
text: '罗湖区',
id:'440303',
leaf: true
,
text: '福田区',
id:'440304',
leaf: true
,
text: '南山区',
id:'440305',
leaf: true
,
text: '宝安区',
id:'440306',
leaf: true
,
text: '龙岗区',
id:'440307',
leaf: true
]
]
怎么通过id来获取text,给出直接代码参考下吧,如果可以会追分的!
Java 读写json格式的文件方法:
一、要解决这个问题首先要知道json格式是什么?
JSON格式:
比如学生有学号,姓名,性别等。
用json表示则为:
这代表一个学生的信息。
如果多个,如下:
"studno":"11111","studname":"xxxx","studsex":"男",
"studno":"33333","studname":"ssss","studsex":"男"]
这就是json格式。
二、那如何操作json格式的文件呢?
解答:就是直接读写文件,再把读出来的文件内容格式化成json就可以了。
三、具体操作:
1、有一个实体类,如下:
public class ElectSetpublic String xueqi;
public String xuenian;
public String startTime;
public String endTime;
public int menshu;
public String isReadDB;
//"xueqi":,"xuenian":,"startTime":,"endTime":,"renshu":,"isReadDB":
public String getXueqi()
return xueqi;
public void setXueqi(String xueqi)
this.xueqi = xueqi;
public String getXuenian()
return xuenian;
public void setXuenian(String xuenian)
this.xuenian = xuenian;
public String getStartTime()
return startTime;
public void setStartTime(String startTime)
this.startTime = startTime;
public String getEndTime()
return endTime;
public void setEndTime(String endTime)
this.endTime = endTime;
public int getMenshu()
return menshu;
public void setMenshu(int menshu)
this.menshu = menshu;
public String getIsReadDB()
return isReadDB;
public void setIsReadDB(String isReadDB)
this.isReadDB = isReadDB;
2.有一个json格式的文件,存的就是他的信息,如下:
Sets.json:"xuenian":"2007-2008","xueqi":"1","startTime":"2009-07-19 08:30","endTime":"2009-07-22 18:00","menshu":"10","isReadDB":"Y"
3.具体操作:
/** 取出文件内容,填充对象
*/
public ElectSet findElectSet(String path)
ElectSet electset=new ElectSet();
String sets=ReadFile(path);//获得json文件的内容
JSONObject jo=JSONObject.fromObject(sets);//格式化成json对象
//System.out.println("------------" jo);
//String name = jo.getString("xuenian");
//System.out.println(name);
electset.setXueqi(jo.getString("xueqi"));
electset.setXuenian(jo.getString("xuenian"));
electset.setStartTime(jo.getString("startTime"));
electset.setEndTime(jo.getString("endTime"));
electset.setMenshu(jo.getInt("menshu"));
electset.setIsReadDB(jo.getString("isReadDB"));
return electset;
//设置属性,并保存
public boolean setElect(String path,String sets)
try
writeFile(path,sets);
return true;
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
return false;
//读文件,返回字符串
public String ReadFile(String path)
File file = new File(path);
BufferedReader reader = null;
String laststr = "";
try
//System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
//一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null)
//显示行号
System.out.println("line " line ": " tempString);
laststr = laststr tempString;
line ;
reader.close();
catch (IOException e)
e.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
return laststr;
//把json格式的字符串写到文件
public void writeFile(String filePath, String sets) throws IOException
FileWriter fw = new FileWriter(filePath);
PrintWriter out = new PrintWriter(fw);
out.write(sets);
out.println();
fw.close();
out.close();
4.调用,使用(在网站的controller里调用的):
//取出json对象public void GetElectSettings(HttpServletRequest request,
HttpServletResponse response) throws Exception
ElectSet electset=new ElectSet();
String absPath = request.getRealPath("\\");
String filePath = absPath "public\\sets\\electSets.json";
electset=businessService.findElectSets(filePath);//这里是调用,大家自己改改,我调用的业务层 的。
JSONArray jsonItems = new JSONArray();
jsonItems.add(electset);
JSONObject jo=new JSONObject();
jo.put("data", jsonItems);
System.out.println(jo);
request.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(jo);
//修改json文件
public void ChangeElectSet(HttpServletRequest request,
HttpServletResponse response) throws Exception
request.setCharacterEncoding("UTF-8");
response.setContentType("text/json;charset=utf-8");
log.info("reach ChangeElectSet");
String json = (String) request.getParameter("json").trim();
log.info("Change ElectSet");
log.info(json);
ElectSet sets = new ElectSet();
JSONObject jsonObject = JSONObject.fromObject(json);
sets = (ElectSet) JSONObject.toBean(jsonObject, ElectSet.class);
if(sets.getIsReadDB()=="false")
sets.setIsReadDB("否");
else
sets.setIsReadDB("是");
String changes=""xuenian":"";//因为json的属性要用引号,所以要用"转义一下
changes =sets.getXuenian() "","xueqi":"" sets.getXueqi() "","startTime":"" sets.getStartTime() "","endTime":"" sets.getEndTime() "","menshu":"" sets.getMenshu() "","isReadDB":"" sets.getIsReadDB() """;
System.out.println(changes);
String absPath = request.getRealPath("\\");
String filePath = absPath "public\\sets\\electSets.json"; 参考技术A <script type="text/javascript">
//JSON 取值
//len = json.length 获取JSON表达式[]中 项数。
//json[index].school_name 表示索引为index(从0开始)的“” 对象,school_name表示该对象的值
var json = school;
for (var index = 0, len = json.length; index < len; index++)
var areaid = json[index].school_id; //学校编号
var schoolname = json[index].school_name; //学校名称
var zoneid = json[index].zone_id; //区域编号
var schoolx = json[index].school_x; //学校经度
var schooly = json[index].school_y; //学校纬度
var content = "学校编号:" + areaid + "|学校名称:" + schoolname + "|区域编号:" + zoneid +
"|学校经度:" + schoolx + "|学校纬度:" + schooly + "<br/>";
document.write(content);
</script>
这个可以 按你对应的json名和项值进行改动,输出。。。本回答被提问者和网友采纳 参考技术B 使用json RPC 即可 参考技术C
这个我做过,可是我重装过系统了,不好测试。我可以给你解析json需要的jar包。其他的百度应该有的。
如何从 Java 文件中读取许多 json 对象?
【中文标题】如何从 Java 文件中读取许多 json 对象?【英文标题】:How can I read MANY json objects from a file in Java? 【发布时间】:2014-06-25 20:07:28 【问题描述】:JsonReader
reader 对应的方法遵循“对于一个 reader 实例,该方法只需要调用一次”的规则。是否有任何标准工具可以从流中读取直到结束?
【问题讨论】:
好东西!关于第一个选项。出于技术原因,我想留在 JSR-353 中。关于第二个。是否保证 InputStream 会记住上次读取它的位置?事实上它应该,但它是否在任何文档中明确说明? (把我的cmets转给一个答案) 【参考方案1】:您可以围绕同一个InputStream
/ Reader
重复构造多个JsonReader
s。只要您不在流上做任何其他事情并且只要解析器没有提前读取,每个后续的解析器都应该从最后一个停止的地方开始。请注意,它是否可以提前读取是未定义的,并且可能是特定于实现的。另请注意,解析器实现通常会关闭给定的流/读取器,您可能需要使用阻止关闭的简单流/读取器包装器来抑制这种情况,如下所示:
Json.createReader(new NoCloseInputStream(myInputStream));
否则,请尝试不同的解析器。我有一个FOSS JSON parser,它可以读取我网站上的离散对象流。
另外, 没关系;如果多次调用 JsonReader
的文档说 read()
方法需要只被调用一次;它并没有说必须只调用一次,因此值得尝试反复调用read()
以查看它是否有效。read
、readObject
、readArray
或 close
方法中的任何一个,这些方法被记录为抛出 IllegalStateException
。
【讨论】:
“另请注意,解析器实现通常会关闭给定的流/读取器”。它肯定会引发异常,但不会引发关闭流。javax.json.stream.JsonParsingException: Unexpected char 1 096 at (line no=1, column no=1, offset=0)
以上是关于java读取json文件的问题的主要内容,如果未能解决你的问题,请参考以下文章