json字符串解析取值

qq_39622904 2017-11-15 06:02:51
{"extre":"","paid_fee":"29.90","shop_title":"米蕾娜","is_eticket":false,"create_order_time":"2017-11-15 11:43:44","order_id":"95138298738627693","order_status":"7","seller_nick":"小山开店0809","auction_infos":[{"auction_id":"AAFXwRiuADthbYyL-zDymh1e","detail_order_id":"95138298738627693","real_pay":"29.90","auction_pict_url":"i1/167735382/TB2bAiYpi0TMKJjSZFNXXa_1FXa_!!167735382.jpg","auction_title":"天天特价韩版黑色打底裤踩脚加绒加厚秋冬保暖肉色毛裤女外穿显瘦","auction_amount":"1"}]}

如上,大神们,有没有好的方法 可以比较准确的取值?
...全文
1141 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqc8994 2017-11-24
  • 打赏
  • 举报
回复
完成任务只需要写个类用框架映射
qq_39622904 2017-11-20
  • 打赏
  • 举报
回复
引用 15 楼 qq_40365364 的回复:
你写一个对象,字段和json里面一一对应,接收到json后转换成对象,然后想去什么取什么,也不用管顺序,不用管有没有那个值没传
点错了!---- 是的,写了 两个对象 去对应相应的字段!
qq_39622904 2017-11-20
  • 打赏
  • 举报
回复
引用 16 楼 qq_40365364 的回复:
/** * Copyright 2017 bejson.com */ package com.besjon.pojo; import java.util.List; /** * Auto-generated: 2017-11-17 17:54:15 * * @author bejson.com (i@bejson.com) * @website http://www.bejson.com/java2pojo/ */ public class JsonRootBean { private String extre; private String paid_fee; private String shop_title; private boolean is_eticket; private String create_order_time; private String order_id; private String order_status; private String seller_nick; private List<Auction_infos> auction_infos; public void setExtre(String extre) { this.extre = extre; } public String getExtre() { return extre; } public void setPaid_fee(String paid_fee) { this.paid_fee = paid_fee; } public String getPaid_fee() { return paid_fee; } public void setShop_title(String shop_title) { this.shop_title = shop_title; } public String getShop_title() { return shop_title; } public void setIs_eticket(boolean is_eticket) { this.is_eticket = is_eticket; } public boolean getIs_eticket() { return is_eticket; } public void setCreate_order_time(String create_order_time) { this.create_order_time = create_order_time; } public String getCreate_order_time() { return create_order_time; } public void setOrder_id(String order_id) { this.order_id = order_id; } public String getOrder_id() { return order_id; } public void setOrder_status(String order_status) { this.order_status = order_status; } public String getOrder_status() { return order_status; } public void setSeller_nick(String seller_nick) { this.seller_nick = seller_nick; } public String getSeller_nick() { return seller_nick; } public void setAuction_infos(List<Auction_infos> auction_infos) { this.auction_infos = auction_infos; } public List<Auction_infos> getAuction_infos() { return auction_infos; } } /** * Copyright 2017 bejson.com */ package com.besjon.pojo; /** * Auto-generated: 2017-11-17 17:54:15 * * @author bejson.com (i@bejson.com) * @website http://www.bejson.com/java2pojo/ */ public class Auction_infos { private String auction_id; private String detail_order_id; private String real_pay; private String auction_pict_url; private String auction_title; private String auction_amount; public void setAuction_id(String auction_id) { this.auction_id = auction_id; } public String getAuction_id() { return auction_id; } public void setDetail_order_id(String detail_order_id) { this.detail_order_id = detail_order_id; } public String getDetail_order_id() { return detail_order_id; } public void setReal_pay(String real_pay) { this.real_pay = real_pay; } public String getReal_pay() { return real_pay; } public void setAuction_pict_url(String auction_pict_url) { this.auction_pict_url = auction_pict_url; } public String getAuction_pict_url() { return auction_pict_url; } public void setAuction_title(String auction_title) { this.auction_title = auction_title; } public String getAuction_title() { return auction_title; } public void setAuction_amount(String auction_amount) { this.auction_amount = auction_amount; } public String getAuction_amount() { return auction_amount; } }
是的!我也是用这个gson 解决的!
迟到_啦 2017-11-20
  • 打赏
  • 举报
回复
引用 21 楼 qq_39622904 的回复:
[quote=引用 15 楼 qq_40365364 的回复:] 你写一个对象,字段和json里面一一对应,接收到json后转换成对象,然后想去什么取什么,也不用管顺序,不用管有没有那个值没传
点错了!---- 是的,写了 两个对象 去对应相应的字段![/quote] 你是怎么拿到数据的呢
迟到_啦 2017-11-20
  • 打赏
  • 举报
回复
引用 19 楼 Milogenius 的回复:
[quote=引用 18楼迟到_啦 的回复:][quote=引用 17 楼 Milogenius 的回复:] [quote=引用 2 楼 qq_19314763 的回复:] 用json对象取值,可以取到自己真正想要的数据,并且以自己希望显示的格式输出
你好,我想学习一下你的写法,请问你的3.txt放在什么位置,我写完以后运行报错如下: [/quote] 我那样写的话3.txt应该放在当前项目根目录下面,如果写在计算机其他任何地方也行,只要你写全路径就可以,[/quote]相对路径找不到,我最后写为全路径了[/quote] EN 可以的
爱写Bug的麦洛 2017-11-19
  • 打赏
  • 举报
回复
引用 18楼迟到_啦 的回复:
[quote=引用 17 楼 Milogenius 的回复:] [quote=引用 2 楼 qq_19314763 的回复:] 用json对象取值,可以取到自己真正想要的数据,并且以自己希望显示的格式输出
你好,我想学习一下你的写法,请问你的3.txt放在什么位置,我写完以后运行报错如下: [/quote] 我那样写的话3.txt应该放在当前项目根目录下面,如果写在计算机其他任何地方也行,只要你写全路径就可以,[/quote]相对路径找不到,我最后写为全路径了
爱写Bug的麦洛 2017-11-18
  • 打赏
  • 举报
回复
引用 2 楼 qq_19314763 的回复:
用json对象取值,可以取到自己真正想要的数据,并且以自己希望显示的格式输出


你好,我想学习一下你的写法,请问你的3.txt放在什么位置,我写完以后运行报错如下:
迟到_啦 2017-11-18
  • 打赏
  • 举报
回复
引用 17 楼 Milogenius 的回复:
[quote=引用 2 楼 qq_19314763 的回复:] 用json对象取值,可以取到自己真正想要的数据,并且以自己希望显示的格式输出
你好,我想学习一下你的写法,请问你的3.txt放在什么位置,我写完以后运行报错如下: [/quote] 我那样写的话3.txt应该放在当前项目根目录下面,如果写在计算机其他任何地方也行,只要你写全路径就可以,
迟到_啦 2017-11-17
  • 打赏
  • 举报
回复
如果有的字段突然没有了,而这个字段恰恰上一次用过,这时候代码就会出问题,因为获取不到那个字段的值,就像我帮你占了一个座位,你人却不见了,就会报错。 如果有的字段更改,那要看字段更改前后的位置是否 还在一个对象中,如果从json数组中跑到了json对象代码也会报错,需要相应修改 …… 这样吧 ,你给我几段你要获取的json示例(最好差别比较大的,就是你题目里发的那些数据,多来几段,差别越大越好),我来做对比,然后修改代码之后尝试解决
qq_39622904 2017-11-17
  • 打赏
  • 举报
回复
引用 10 楼 qq_19314763 的回复:
json数据中字符串位置有变化的话不一定会影响取值结果,也就是可能会获取失败,可能仍然正常取值。 因为你没有告诉位置怎么变化,如果从一个字符串对象变成了一个json对象或者json数组的内容,那就肯定会影响取值,这个方法使用的时候就会报错,必须对代码相应的作出修改。 但是如果位置不变化,仅仅是值发生变化,那就肯定可以准确的获取json数据,所以现在需要的是了解你的需求和要求
这个是从网络获取的json字符串,每次的字段中的一些字段位置可能会有所变动,或者说有些字段没有了,这是从淘宝上返回的一些订单信息,每次都会有所变动!需要解析这个json字符串 ,获取其中的一些字段值,然后保存!要求是每次取值必须准确。
qq_39622904 2017-11-17
  • 打赏
  • 举报
回复
引用 9 楼 qq_19314763 的回复:
你仅仅是要拿到准确的数据自己保存查看么? 还是说你是想学习json数据获取的方法,学习技术呢
学习技术 是一部分,但是确实是要完成任务,后台中有这方面的需求!
qq_39622904 2017-11-17
  • 打赏
  • 举报
回复
引用 8 楼 qq_19314763 的回复:
[quote=引用 5 楼 qq_39622904 的回复:] [quote=引用 4 楼 qq_19314763 的回复:] 我帮你也测试了一下:看看是不是你想要的结果(代码和测试结果都在)


package com.briup.exam;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.StringWriter;
import org.json.JSONArray;
import org.json.JSONObject;

public class Test {

	public static void main(String[] args) {
		try {

			// 把json数据先放到3.txt文件中,然后通过创建缓冲读入文件流拿到3.txt文件数据
			BufferedReader br = new BufferedReader(new FileReader("3.txt"));
			// 字符串生成器,存放从3.txt取到的数据,以便接下来用于jsonObject对象的接收
			StringWriter sw = new StringWriter();

			// 从读入流到字符串写出流的数据传输
			String s;
			while ((s = br.readLine()) != null) {
				sw.append(s);
			}
			br.close();

			// 通过控制台查看结果来测试是否写出成功
			// System.out.println(sw.toString());

			// 创建JsonObject对象,以便对json数据进行处理之后取自己想要的值
			JSONObject object = new JSONObject(sw.toString());
			// 新建一个字符串生成器,用于存放整理之后的数据,方便最后在控制台做输出测试
			StringBuilder sb = new StringBuilder();

                        //把json数据一个一个拿到并赋给一个一个相应对象
			String paid_fee = object.getString("paid_fee");
			String shop_title = object.getString("shop_title");
			String order_time = object.getString("create_order_time");
			String order_id = object.getString("order_id");
			String order_status = object.getString("order_status");
			String seller_nick = object.getString("seller_nick");

			JSONArray auction_infos = object.getJSONArray("auction_infos");
			JSONObject auction_object = auction_infos.getJSONObject(0);
			String detail_order_id = auction_object.getString("detail_order_id");
			String real_pay = auction_object.getString("real_pay");
			String auction_pict_url = auction_object.getString("auction_pict_url");
			String auction_title = auction_object.getString("auction_title");
			String auction_amount = auction_object.getString("auction_amount");

                        //把拿到的一个又一个json值存放到字符串生成器sb中,以便之后用其输出测试
			sb.append("应付费用:" + paid_fee + "\n");
			sb.append("店铺名:" + shop_title + "\n");
			sb.append("订单创建时间:" + order_time + "\n");
			sb.append("订单编号:" + order_id + "\n");
			sb.append("订单状态:" + order_status + "\n");
			sb.append("卖家昵称:" + seller_nick + "\n");
			sb.append("详细订单编号:" + detail_order_id + "\n");
			sb.append("实际支付费用" + real_pay + "\n");
			sb.append("详细图片链接:" + auction_pict_url + "\n");
			sb.append("详细图片标题:" + auction_title + "\n");
			sb.append("购买数量:" + auction_amount + "\n");

                       //输出字符串生成器 sb,查看所取数据是否是想要数据
			System.out.println(sb.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

测试结果如下: 你看看是不是你想要的方法,如果有什么不恰当的地方随时可以讨论,或者你对这种方法不满意 我也会再想其他方法帮你解决,希望你可以顺利完成任务。
这个json字符串的一些字段的位置有可能会发生变化的,这样读取的话每次的值应该都是准确的吧?[/quote] 我感觉你是从网上获取json数据然后取想要的字段是么? 这样的话就需要网络接口来自动获取网络更新的内容。 如果不是从网络上获取的json数据,而是你自己写的,也就是之后修改都是在文件中手动修改的话,现在这个方法就完全可以取到更新后的值(只限于本地文件的数据更新) 所以 你可以在具体说一下你的想法,或者说你想实现的具体效果是什么呢[/quote] 是从网络获取的json字符串,接口已经可以了,是要从获取的json中获取一些值,然后保存。每次获取的json字符串中字段值的位置可能会有变动,但是字段的名称不变。
qq_40365364 2017-11-17
  • 打赏
  • 举报
回复
/** * Copyright 2017 bejson.com */ package com.besjon.pojo; import java.util.List; /** * Auto-generated: 2017-11-17 17:54:15 * * @author bejson.com (i@bejson.com) * @website http://www.bejson.com/java2pojo/ */ public class JsonRootBean { private String extre; private String paid_fee; private String shop_title; private boolean is_eticket; private String create_order_time; private String order_id; private String order_status; private String seller_nick; private List<Auction_infos> auction_infos; public void setExtre(String extre) { this.extre = extre; } public String getExtre() { return extre; } public void setPaid_fee(String paid_fee) { this.paid_fee = paid_fee; } public String getPaid_fee() { return paid_fee; } public void setShop_title(String shop_title) { this.shop_title = shop_title; } public String getShop_title() { return shop_title; } public void setIs_eticket(boolean is_eticket) { this.is_eticket = is_eticket; } public boolean getIs_eticket() { return is_eticket; } public void setCreate_order_time(String create_order_time) { this.create_order_time = create_order_time; } public String getCreate_order_time() { return create_order_time; } public void setOrder_id(String order_id) { this.order_id = order_id; } public String getOrder_id() { return order_id; } public void setOrder_status(String order_status) { this.order_status = order_status; } public String getOrder_status() { return order_status; } public void setSeller_nick(String seller_nick) { this.seller_nick = seller_nick; } public String getSeller_nick() { return seller_nick; } public void setAuction_infos(List<Auction_infos> auction_infos) { this.auction_infos = auction_infos; } public List<Auction_infos> getAuction_infos() { return auction_infos; } } /** * Copyright 2017 bejson.com */ package com.besjon.pojo; /** * Auto-generated: 2017-11-17 17:54:15 * * @author bejson.com (i@bejson.com) * @website http://www.bejson.com/java2pojo/ */ public class Auction_infos { private String auction_id; private String detail_order_id; private String real_pay; private String auction_pict_url; private String auction_title; private String auction_amount; public void setAuction_id(String auction_id) { this.auction_id = auction_id; } public String getAuction_id() { return auction_id; } public void setDetail_order_id(String detail_order_id) { this.detail_order_id = detail_order_id; } public String getDetail_order_id() { return detail_order_id; } public void setReal_pay(String real_pay) { this.real_pay = real_pay; } public String getReal_pay() { return real_pay; } public void setAuction_pict_url(String auction_pict_url) { this.auction_pict_url = auction_pict_url; } public String getAuction_pict_url() { return auction_pict_url; } public void setAuction_title(String auction_title) { this.auction_title = auction_title; } public String getAuction_title() { return auction_title; } public void setAuction_amount(String auction_amount) { this.auction_amount = auction_amount; } public String getAuction_amount() { return auction_amount; } }
qq_40365364 2017-11-17
  • 打赏
  • 举报
回复
你写一个对象,字段和json里面一一对应,接收到json后转换成对象,然后想去什么取什么,也不用管顺序,不用管有没有那个值没传
qq_39622904 2017-11-16
  • 打赏
  • 举报
回复
引用 4 楼 qq_19314763 的回复:
我帮你也测试了一下:看看是不是你想要的结果(代码和测试结果都在)


package com.briup.exam;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.StringWriter;
import org.json.JSONArray;
import org.json.JSONObject;

public class Test {

	public static void main(String[] args) {
		try {

			// 把json数据先放到3.txt文件中,然后通过创建缓冲读入文件流拿到3.txt文件数据
			BufferedReader br = new BufferedReader(new FileReader("3.txt"));
			// 字符串生成器,存放从3.txt取到的数据,以便接下来用于jsonObject对象的接收
			StringWriter sw = new StringWriter();

			// 从读入流到字符串写出流的数据传输
			String s;
			while ((s = br.readLine()) != null) {
				sw.append(s);
			}
			br.close();

			// 通过控制台查看结果来测试是否写出成功
			// System.out.println(sw.toString());

			// 创建JsonObject对象,以便对json数据进行处理之后取自己想要的值
			JSONObject object = new JSONObject(sw.toString());
			// 新建一个字符串生成器,用于存放整理之后的数据,方便最后在控制台做输出测试
			StringBuilder sb = new StringBuilder();

                        //把json数据一个一个拿到并赋给一个一个相应对象
			String paid_fee = object.getString("paid_fee");
			String shop_title = object.getString("shop_title");
			String order_time = object.getString("create_order_time");
			String order_id = object.getString("order_id");
			String order_status = object.getString("order_status");
			String seller_nick = object.getString("seller_nick");

			JSONArray auction_infos = object.getJSONArray("auction_infos");
			JSONObject auction_object = auction_infos.getJSONObject(0);
			String detail_order_id = auction_object.getString("detail_order_id");
			String real_pay = auction_object.getString("real_pay");
			String auction_pict_url = auction_object.getString("auction_pict_url");
			String auction_title = auction_object.getString("auction_title");
			String auction_amount = auction_object.getString("auction_amount");

                        //把拿到的一个又一个json值存放到字符串生成器sb中,以便之后用其输出测试
			sb.append("应付费用:" + paid_fee + "\n");
			sb.append("店铺名:" + shop_title + "\n");
			sb.append("订单创建时间:" + order_time + "\n");
			sb.append("订单编号:" + order_id + "\n");
			sb.append("订单状态:" + order_status + "\n");
			sb.append("卖家昵称:" + seller_nick + "\n");
			sb.append("详细订单编号:" + detail_order_id + "\n");
			sb.append("实际支付费用" + real_pay + "\n");
			sb.append("详细图片链接:" + auction_pict_url + "\n");
			sb.append("详细图片标题:" + auction_title + "\n");
			sb.append("购买数量:" + auction_amount + "\n");

                       //输出字符串生成器 sb,查看所取数据是否是想要数据
			System.out.println(sb.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

测试结果如下: 你看看是不是你想要的方法,如果有什么不恰当的地方随时可以讨论,或者你对这种方法不满意 我也会再想其他方法帮你解决,希望你可以顺利完成任务。
这个json字符串的一些字段的位置有可能会发生变化的,这样读取的话每次的值应该都是准确的吧?
迟到_啦 2017-11-16
  • 打赏
  • 举报
回复
json数据中字符串位置有变化的话不一定会影响取值结果,也就是可能会获取失败,可能仍然正常取值。 因为你没有告诉位置怎么变化,如果从一个字符串对象变成了一个json对象或者json数组的内容,那就肯定会影响取值,这个方法使用的时候就会报错,必须对代码相应的作出修改。 但是如果位置不变化,仅仅是值发生变化,那就肯定可以准确的获取json数据,所以现在需要的是了解你的需求和要求
迟到_啦 2017-11-16
  • 打赏
  • 举报
回复
你仅仅是要拿到准确的数据自己保存查看么? 还是说你是想学习json数据获取的方法,学习技术呢
迟到_啦 2017-11-16
  • 打赏
  • 举报
回复
引用 5 楼 qq_39622904 的回复:
[quote=引用 4 楼 qq_19314763 的回复:] 我帮你也测试了一下:看看是不是你想要的结果(代码和测试结果都在)


package com.briup.exam;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.StringWriter;
import org.json.JSONArray;
import org.json.JSONObject;

public class Test {

	public static void main(String[] args) {
		try {

			// 把json数据先放到3.txt文件中,然后通过创建缓冲读入文件流拿到3.txt文件数据
			BufferedReader br = new BufferedReader(new FileReader("3.txt"));
			// 字符串生成器,存放从3.txt取到的数据,以便接下来用于jsonObject对象的接收
			StringWriter sw = new StringWriter();

			// 从读入流到字符串写出流的数据传输
			String s;
			while ((s = br.readLine()) != null) {
				sw.append(s);
			}
			br.close();

			// 通过控制台查看结果来测试是否写出成功
			// System.out.println(sw.toString());

			// 创建JsonObject对象,以便对json数据进行处理之后取自己想要的值
			JSONObject object = new JSONObject(sw.toString());
			// 新建一个字符串生成器,用于存放整理之后的数据,方便最后在控制台做输出测试
			StringBuilder sb = new StringBuilder();

                        //把json数据一个一个拿到并赋给一个一个相应对象
			String paid_fee = object.getString("paid_fee");
			String shop_title = object.getString("shop_title");
			String order_time = object.getString("create_order_time");
			String order_id = object.getString("order_id");
			String order_status = object.getString("order_status");
			String seller_nick = object.getString("seller_nick");

			JSONArray auction_infos = object.getJSONArray("auction_infos");
			JSONObject auction_object = auction_infos.getJSONObject(0);
			String detail_order_id = auction_object.getString("detail_order_id");
			String real_pay = auction_object.getString("real_pay");
			String auction_pict_url = auction_object.getString("auction_pict_url");
			String auction_title = auction_object.getString("auction_title");
			String auction_amount = auction_object.getString("auction_amount");

                        //把拿到的一个又一个json值存放到字符串生成器sb中,以便之后用其输出测试
			sb.append("应付费用:" + paid_fee + "\n");
			sb.append("店铺名:" + shop_title + "\n");
			sb.append("订单创建时间:" + order_time + "\n");
			sb.append("订单编号:" + order_id + "\n");
			sb.append("订单状态:" + order_status + "\n");
			sb.append("卖家昵称:" + seller_nick + "\n");
			sb.append("详细订单编号:" + detail_order_id + "\n");
			sb.append("实际支付费用" + real_pay + "\n");
			sb.append("详细图片链接:" + auction_pict_url + "\n");
			sb.append("详细图片标题:" + auction_title + "\n");
			sb.append("购买数量:" + auction_amount + "\n");

                       //输出字符串生成器 sb,查看所取数据是否是想要数据
			System.out.println(sb.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

测试结果如下: 你看看是不是你想要的方法,如果有什么不恰当的地方随时可以讨论,或者你对这种方法不满意 我也会再想其他方法帮你解决,希望你可以顺利完成任务。
这个json字符串的一些字段的位置有可能会发生变化的,这样读取的话每次的值应该都是准确的吧?[/quote] 我感觉你是从网上获取json数据然后取想要的字段是么? 这样的话就需要网络接口来自动获取网络更新的内容。 如果不是从网络上获取的json数据,而是你自己写的,也就是之后修改都是在文件中手动修改的话,现在这个方法就完全可以取到更新后的值(只限于本地文件的数据更新) 所以 你可以在具体说一下你的想法,或者说你想实现的具体效果是什么呢
月神夜下梦 2017-11-16
  • 打赏
  • 举报
回复
JSON取值很多框架都可以,jsonlib、gson、fastjson等等,都可以准确的取值。
qq_39622904 2017-11-16
  • 打赏
  • 举报
回复
引用 1 楼 AlbertLiangzt 的回复:
不是已经取到值了么
是要取到字符串某些字段的值
加载更多回复(4)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧