java通过url得到json字符串并解析

c/s架构中进场用到通过url得到json字符串,例如android

这种方式可以方便url获得json字符串

@Test
	public void test0(){
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL("http://localhost:3000/news/getById?id=186208");
			InputStreamReader isr = new InputStreamReader(url.openStream());
			char[] buffer = new char[10];
			while(isr.read(buffer)!=-1){
				sb.append(buffer);
			}
			System.out.println(sb.toString());
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

但是,这样得到的字符串是有问题的,常常在末尾莫名的多加了几个字符。例如:

目的字符串:

{
  "id": "",
  "title": "北京军区为集宁义务植树基地再添新绿",
  "date": "2014-04-28T09:25:13.000Z",
  "author": "首席记者 乌云夫"
}席记者 乌云夫


在最后的花括号结束后就没有字符了,但是最后获得的确多了几个字符,

这是因为在将buffer这个缓存字符数组增加到StringBuffer上时没有确定当前获取的字符长度,最后读取的字符长度可能没有这个buffer缓存数组长,所以将上一次的字符又添加到了StringBuffer的末尾。

解决方法:

在每次将数据读到缓存数组buffer中时,检查当前读取的字符长度,将缓存数组增加到StringBuffer时,按照字符数组长度增加

@Test
	public void test1() {
		String json = null;
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL("http://localhost:3000/news/getById?id=186208");
			InputStreamReader isr = new InputStreamReader(url.openStream());
			char[] buffer = new char[1024];
			<span style="color: rgb(255, 0, 0);">int len = 0;
			while((len=isr.read(buffer))!=-1){
				sb.append(buffer,0,len);
			}</span>
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		json = sb.toString();
		System.out.println(json);

	}
对返回的json数据进行解析
		JSONTokener jsonParser = new JSONTokener(json);
		JSONObject article = (JSONObject) jsonParser.nextValue();
		String title = article.getString("title");
		System.out.println(title);

其中JSONTokener所在的包 net.sf.json.util

maven中获取json-lib.jar

<span style="white-space:pre">	</span><dependency>
	    <groupId>net.sf.json-lib</groupId>
	    <artifactId>json-lib</artifactId>
	    <version>2.3</version>
	    <classifier>jdk15</classifier>
	</dependency>



                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用第三方库如Gson或Jackson来解析JSON字符串,并且可以通过修改对象属性的方式来更新其中的某个元素字段值。以下是使用Gson库的示例代码: ``` import com.google.gson.Gson; public class JsonExample { public static void main(String[] args) { String jsonString = "{\"name\":\"John\",\"age\":30,\"links\":[{\"name\":\"Google\",\"url\":\"https://www.google.com\"},{\"name\":\"Baidu\",\"url\":\"https://www.baidu.com\"}]}"; Gson gson = new Gson(); MyObject myObject = gson.fromJson(jsonString, MyObject.class); System.out.println(myObject); // Update the URL of the first link myObject.getLinks().get(0).setUrl("https://www.newurl.com"); // Convert the object back to JSON string String updatedJsonString = gson.toJson(myObject); System.out.println(updatedJsonString); } } class MyObject { private String name; private int age; private List<Link> links; // getters and setters @Override public String toString() { return "MyObject{" + "name='" + name + '\'' + ", age=" + age + ", links=" + links + '}'; } } class Link { private String name; private String url; // getters and setters @Override public String toString() { return "Link{" + "name='" + name + '\'' + ", url='" + url + '\'' + '}'; } } ``` 在这个例子中,我们首先使用Gson库将JSON字符串解析成一个Java对象。然后,我们可以通过访问对象的属性来获取或修改其中的元素字段值。在这个例子中,我们将第一个链接的URL字段值更新为一个新的值。最后,我们将更新后的Java对象转换回JSON字符串

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值