天道酬勤,学无止境

如何在 Java 中操作 HTTP json 响应数据(how to manipulate HTTP json response data in Java)

问题
HttpGet getRequest=new HttpGet("/rest/auth/1/session/");
getRequest.setHeaders(headers);
httpResponse = httpclient.execute(target,getRequest);

entity = httpResponse.getEntity();

System.out.println(EntityUtils.toString(entity));

json格式输出如下

----------------------------------------
{"session":{"name":"JSESSIONID","value":"5F736EF0A08ACFD7020E482B89910589"},"loginInfo":{"loginCount":50,"previousLoginTime":"2014-11-29T14:54:10.424+0530"}}
----------------------------------------

我想知道的是如何使用Java操作这些数据而不将其写入文件? 我想在我的代码中打印名称、值

杰克逊图书馆是首选,但任何人都可以。

提前致谢

回答1

您可以使用此 JSON 库将您的 json 字符串解析为 JSONObject 并从该对象读取值,如下所示:

JSONObject json = new JSONObject(EntityUtils.toString(entity));
JSONObject sessionObj =  json.getJSONObject("session");
System.out.println(sessionObj.getString("name"));

您需要从要读取值的位置读取该对象。 在这里,你想要的值name参数,它是内部session对象,所以你第一次得到的价值session因为使用的JSONObject getJSONObject(KeyString中)和读name从使用对象功能的getString(KeyString中)显示为上述数值。

愿这对你有帮助。

回答2

这是没有图书馆的两种方法。

新(更好)答案:

findInLine可能效果更好。 ( scannerName.findInLine(pattern); )

也许是这样的:

s.findInLine("{"session":{"name":"(\\w+)","value":"(\\w+)"},"loginInfo":{"loginCount":(\\d+),"previousLoginTime":"(\\w+)"}}");

w 匹配单词字符(字母、数字和下划线),d 匹配数字,+ 使它匹配不止一次(所以它不会在一个字符后停止)。

在此处阅读模式 https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

旧答案:

我很确定您可以在这里使用带有自定义分隔符的扫描仪。

Scanner s = new Scanner(input).useDelimiter("\"");

应该返回如下内容:

{
session
:{
name
:
JSESSIONID
,
value
:
5F736EF0A08ACFD7020E482B89910589

等等。 然后只需对该列表进行排序/使用更智能的分隔符/删除不必要的位。 摆脱所有其他项目是一个相当不错的开始。

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html 有这方面的信息。

回答3

我强烈推荐建立在 apache http api 上的 http-request。

private static final HttpRequest<Map<String, Map<String, String>>> HTTP_REQUEST = HttpRequestBuilder.createGet(yourUri, new TypeReference<Map<String, Map<String, String>>>{})
    .addDefaultHeaders(headers)
    .build();

public void send(){
   ResponseHandler<Map<String, Map<String, String>>> responseHandler = HTTP_REQUEST.execute();
   Map<String, Map<String, String>> data = responseHandler.get();
}

如果你想使用杰克逊,你可以:

entity = httpResponse.getEntity();
ObjectMapper mapper = new ObjectMapper();
Map<String, Map<String, String>> data = mapper.readValue(entity.getContent(),  new TypeReference<Map<String, Map<String, String>>>{});

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何使用类型:jsonp ajax调用中的“ POST”(How to use type: “POST” in jsonp ajax call)
    问题 我正在使用JQuery ajax jsonp。 我有下面的jQuery代码: $.ajax({ type:"GET", url: "Login.aspx", // Send the login info to this page data: str, dataType: "jsonp", timeout: 200000, jsonp:"skywardDetails", success: function(result) { // Show 'Submit' Button $('#loginButton').show(); // Hide Gif Spinning Rotator $('#ajaxloading').hide(); } }); 上面的代码工作正常,我只想将请求发送为“ POST”而不是“ GET” ,请提出如何实现此要求。 谢谢 回答1 您不能使用JSONP ......它根本不是这样的,它创建一个<script>元素来获取数据...它必须是一个GET请求。 除了作为自己的域发布到自己的域之外,除了将其发布到您自己的域之外,您无能为力...但是用户将无法直接执行此操作并看到响应。 回答2 在dataType使用json并像这样发送: $.ajax({ url: "your url which return json", type: "POST"
  • 如何从JSON响应中提取单个值?(How to extract a single value from JSON response?)
    问题 首先,我将自由地让自己成为一个笨拙的文科专家,他完全可以在这种脚本编写方面完全自学。 就是说,我正在尝试使用以下代码从USGS水数据服务获取值: def main(gaugeId): # import modules import urllib2, json # create string url = "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=" + gaugeId + "&parameterCd=00060,00065" # open connection to url urlFile = urllib2.urlopen(url) # load into local JSON list jsonList = json.load(urlFile) # extract and return # how to get cfs, ft, and zulu time? return [cfs, ft, time] 尽管我找到了一些有关如何从JSON响应中提取所需值的教程,但大多数教程都非常简单。 我遇到的困难是从该服务返回的看起来非常复杂的响应中提取出来的。 查看响应,可以看到我想要的是来自两个不同部分的值和一个时间值。 因此,我可以查看响应并查看我的需求,但我一生都无法弄清楚如何提取这些值。 回答1
  • 异步任务的消息与 Java Servlet 交换(Async task's messages exchange with Java Servlet)
    问题 我有一个简单的应用程序通过异步任务与其 Servlet 后端通信。 我在理解消息的包装方式以及如何操作这些消息的数据结构时遇到了一些麻烦。 我想做的是接收多个对象,或者无论如何接收多个异构信息。 我的代码: public class MyServlet extends HttpServlet { ArrayList<Tour> m_tours; @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/plain"); resp.getWriter().println("Please use the form to POST to this url"); } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { String order = req.getParameter("order"); resp.setContentType("text/plain"); if (order == null) { resp.getWriter()
  • 第 16 章 json-ajax
    1、什么是 JSON? JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。 同时也易于机器解析和生成。 JSON采用完全独立于语言的文本格式, 而且很多语言都提供了对 json 的支持(包括 C, C++, C#, Java, JavaScript, Perl, Python等) 。 这样就使得 JSON 成为理想的数据交换格式。 json 是一种轻量级的数据交换格式。 轻量级指的是跟 xml 做比较。 数据交换指的是客户端和服务器之间业务数据的传递格式。 1.1、 JSON 在 JavaScript 中的使用 json 是由键值对组成, 并且由花括号(大括号) 包围。 每个键由引号引起来, 键和值之间使用冒号进行分隔, 多组键值对之间进行逗号进行分隔。 json 定义示例: <script type="text/javascript"> var jsonObj = { "key1":12, "key2":"abc", "key3":true, "key4":[11,"arr",false], "key5":{ "key5_1" : 551, "key5_2" : "key5_2_value" }, "key6":[{ "key6_1_1":6611, "key6_1_2":"key6_1_2_value" },{
  • 了解 Python HTTP 流(Understanding Python HTTP streaming)
    问题 我正在努力使用 Python 和请求访问流 API。 API 内容:“我们启用了一个流端点,用于利用持久性 HTTP 套接字连接请求报价和交易数据。来自 API 的流数据包括发出经过身份验证的 HTTP 请求并保持 HTTP 套接字打开以持续接收数据.” 我一直在尝试访问数据: s = requests.Session() def streaming(symbols): url = 'https://stream.tradeking.com/v1/market/quotes.json' payload = {'symbols': ','.join(symbols)} return s.get(url, params=payload, stream=True) r = streaming(['AAPL', 'GOOG']) 此处的 Requests 文档显示了两件有趣的事情: 使用生成器/迭代器与在数据字段中传递的分块数据一起使用。 对于流数据,它建议使用如下代码: for line in r.iter_lines(): print(line) 两者似乎都不起作用,尽管我不知道在生成器函数中放入什么,因为示例不清楚。 使用 r.iter_lines(),我得到输出:"b'{"status":"connected"}{"status":disconnected"}'"
  • 如何在 CasperJS 中获得 POST 请求后的响应(How to get the response after a POST request in CasperJS)
    问题 我有这个非常简单的代码来在发布请求后从服务器端点读取响应。 实际上,我正在将数据保存到数据库并等待响应,然后再进行下一步 casper.open('http://example.com/ajax.php, { method: 'POST', data: { 'title': '<title>', 'unique_id': '<unique_id>' } }); 在 ajax.php 文件中,我试图以一种简单的方式回应 POST 请求。 如果我从服务器得到正确的响应,这会让我很容易知道。 echo json_encode($_POST); 我试过这些片段,但我无法得到回应。 casper.on('page.resource.received', function(resp){ this.echo(JSON.stringify(resp, null, 4)); }); casper.on('http.status.200', function(resp){ this.echo(JSON.stringify(resp, null, 4)); }); casper.on('resource.received', function(resp) { this.echo(JSON.stringify(resp, null, 4)); }); 回答1 我在向 ElasticSearch
  • 如何在node.js中发出HTTP POST请求?(How is an HTTP POST request made in node.js?)
    问题 如何在node.js中使用数据发出出站HTTP POST请求? 回答1 这是一个使用node.js向Google Compiler API发出POST请求的示例: // We need this to build our post string var querystring = require('querystring'); var http = require('http'); var fs = require('fs'); function PostCode(codestring) { // Build the post string from an object var post_data = querystring.stringify({ 'compilation_level' : 'ADVANCED_OPTIMIZATIONS', 'output_format': 'json', 'output_info': 'compiled_code', 'warning_level' : 'QUIET', 'js_code' : codestring }); // An object of options to indicate where to post to var post_options = { host: 'closure-compiler.appspot.com
  • Ajax-课堂笔记
    Ajax-课堂笔记 jQuery是简化了js,主要是简化了dom操作 找它(选择器)搞它(dom操作方法) 选择器 基本选择器 $("div")$("#div")$(".cls") 层级选择器 $("div span"):使用空格连接的选择器,表示找后代$("div>span"):使用>连接的选择器,表示找子元素 属性选择器 $("a[class]"):含有class属性的a元素$("a[class='btn']"):class属性值为btn的a元素$("a[][][]"):复合属性选择器 基本过滤选择器: :first 找第一个:last找最后一个:not(selector):排除selector结果的不要:even找索引偶数的:odff找索引奇数的:eq(n)找索引等于n的:gt(n)找索引大于n的:lt(n)找索引小于n的 表单属性选择器 :enabled找可用的表单项:disabled找不可用的表单项:checked找被选中的radio或checkbox:selected找被选中的下拉选项option dom操作的方法 操作标签体 html():获取标签体里的内容。如果有参表示设置标签体内容(覆盖式设置,设置html代码是有效的)text():获取标签体的文本。如果有参表示设置标签体文本(覆盖式设置,设置html代码不生效) 操作表单项的值: val(
  • 如何从 C# 方法返回 Json 对象(How to return a Json object from a C# method)
    问题 我正在尝试修复需要 Json 响应的 ASP.NET WebAPI 方法。 但是,它返回的是一个字符串。 最初它是返回 XML 格式,但我已将此行添加到 App_Start\WebApiConfig.cs 中的 mvc 代码中,以便默认返回 Json。 config.Formatters.Remove(config.Formatters.XmlFormatter); 我们已更新 c# 方法如下以使用 NewtonSoft: public string Get() { string userid = UrlUtil.getParam(this, "userid", ""); string pwd = UrlUtil.getParam(this, "pwd", ""); string resp = DynAggrClientAPI.openSession(userid, pwd); JsonSerializer ser = new JsonSerializer(); string jsonresp = JsonConvert.SerializeObject(resp); return resp; } resp var 将作为字符串类型返回: "{status:\"SUCCESS\",data:[\
  • 如何从詹金斯工作流调用 REST(How to call REST from jenkins workflow)
    问题 我想知道如何从(groovy)Jenkins 工作流脚本调用 REST API。 我可以执行“sh 'curl -X POST ...'” - 它可以工作,但是将请求构建为 curl 命令很麻烦,并且处理响应变得复杂。 我更喜欢使用本机 Groovy HTTP 客户端在 groovy 中编程 - 我应该从哪一个开始? 由于脚本在 Jenkins 中运行,因此需要将所有需要的依赖 jar 复制到 Jenkins 上的 groovy 安装中,因此轻量级的东西将不胜感激。 回答1 无需导入任何包的原生 Groovy 代码: // GET def get = new URL("https://httpbin.org/get").openConnection(); def getRC = get.getResponseCode(); println(getRC); if(getRC.equals(200)) { println(get.getInputStream().getText()); } // POST def post = new URL("https://httpbin.org/post").openConnection(); def message = '{"message":"this is a message"}' post.setRequestMethod(
  • 如何在Node.js中处理POST数据?(How to process POST data in Node.js?)
    问题 如何提取Node.js中HTTP POST方法发送的表单数据( form[method="post"] )和文件上传? 我已经阅读了文档,谷歌搜索,什么也没找到。 function (request, response) { //request.post???? } 有图书馆还是黑客? 回答1 如果使用Express(用于Node.js的高性能,高级Web开发),则可以执行以下操作: HTML: <form method="post" action="/"> <input type="text" name="user[name]"> <input type="text" name="user[email]"> <input type="submit" value="Submit"> </form> API客户端: fetch('/', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ user: { name: "John", email: "john@example.com" } }) }); Node.js :(自Express v4.16.0起) // Parse URL-encoded bodies (as sent by HTML
  • ajax笔记大全
    Ajax 1.为什么使用Ajax 页面需要无刷新更新内容,不是刷新整个页面,只是刷新局部内容节约带宽,提高交互操作 2.传统Web与Ajax的差异 从发送请求的方式不同上看 传统Web 浏览器发送同步请求Ajax 异步引擎对象发送请求 从服务器的响应上看 传统Web 响应内容是一个完整的页面Ajax 只响应需要的数据(文本、html代码段、json) 从客户端处理方式上看 传统Web 需要等待服务器响应完成后重新加载整个页面后,用户才能进行操作Ajax 可以动态更新页面中的内容,不影响用户在页面上进行其他的操作 3.什么是Ajax Ajax:是一种异步刷新技术 Asynchronous JavaScript And Xml 4.Ajax的工作流程 5.XMLHttpRequest对象 是整个Ajax的核心提供异步发送请求的能力 方法说明open(String method,String url,boolean async,String user,String password)创建一个新的http请求send(String data)发送请求到服务器abort()取消当前请求setRequestHeader(String header,String value)设置请求的头信息getResponseHeader(String header
  • 如何在Android上调用SOAP Web服务(How to call a SOAP web service on Android [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 3年前关闭。 改善这个问题 我很难找到有关如何使用Android调用标准SOAP / WSDL Web服务的良好信息。 我所能找到的只是非常复杂的文档和对“ kSoap2”的引用,然后是一些关于使用SAX手动解析它们的内容。 好的,很好,但是是2008年,所以我认为应该有一些好的库来调用标准Web服务。 Web服务基本上只是在NetBeans中创建的一种。 我想为生成管道类提供IDE支持。 我只需要最简单/最优雅的方法就可以从基于Android的电话联系基于WSDL的Web服务。 回答1 Android不提供任何类型的SOAP库。 您可以编写自己的代码,也可以使用类似kSOAP 2的代码。您已经注意到,其他人已经可以在自己的项目中编译和使用kSOAP2,但是我不必这样做。 迄今为止,谷歌对将SOAP库添加到Android几乎没有兴趣。 我对此表示怀疑,他们宁愿支持Web服务中当前的趋势,也倾向于基于REST的服务,并使用JSON作为数据封装格式。 或者,使用XMPP进行消息传递。 但这只是推测。 目前,基于XML的Web服务在Android上是一项微不足道的任务。 不知道NetBeans,我无法谈谈那里提供的工具,但是我同意应该有一个更好的库。
  • Curl和PHP-如何通过PUT,POST,GET通过curl传递json(Curl and PHP - how can I pass a json through curl by PUT,POST,GET)
    问题 我一直在为它构建一个Rest API,并一直在通过使用命令行中的curl对其进行测试,这对于CRUD来说非常容易 我可以从命令行成功进行这些调用 curl -u username:pass -X GET http://api.mysite.com/pet/1 curl -d '{"dog":"tall"}' -u username:pass -X GET http://api.mysite.com/pet curl -d '{"dog":"short"}' -u username:pass -X POST http://api.mysite.com/pet curl -d '{"dog":"tall"}' -u username:pass -X PUT http://api.mysite.com/pet/1 上面的调用很容易从命令行进行,并且可以在我的api上正常工作,但是现在我想使用PHP创建curl。 如您所见,我将数据作为json字符串传递。 我已经阅读了很多,我想我可能可以进行POST并包含POST字段,但是我无法找出如何通过GET传递http正文数据。 我看到的所有内容都说您必须将其附加到url,但在命令行表单上看起来却不是这样。 无论如何,如果有人可以在一页上写出正确的方法来用PHP进行这四个操作的话,我一定会喜欢的。 我想看看使用curl和php的最简单方法。
  • Javascript/jQuery 中的并行 Ajax 调用(Parallel Ajax Calls in Javascript/jQuery)
    问题 我对 Javascript/jquery 世界完全陌生,需要一些帮助。 现在,我正在编写一个 html 页面,我必须在其中进行 5 次不同的 Ajax 调用来获取数据以绘制图形。 现在,我像这样调用这 5 个 ajax 调用: $(document).ready(function() { area0Obj = $.parseJSON($.ajax({ url : url0, async : false, dataType : 'json' }).responseText); area1Obj = $.parseJSON($.ajax({ url : url1, async : false, dataType : 'json' }).responseText); . . . area4Obj = $.parseJSON($.ajax({ url : url4, async : false, dataType : 'json' }).responseText); // some code for generating graphs )} // closing the document ready function 我的问题是,在上面的场景中,所有的 ajax 调用都是串行进行的。 也就是说,1 次调用完成后 2 次启动,2 次完成时 3 次启动,依此类推.. 每个 Ajax
  • jQuery跨域Ajax(jQuery Cross Domain Ajax)
    问题 我的ajax代码是 $.ajax({ type: 'GET', dataType: "jsonp", processData: false, crossDomain: true, jsonp: false, url: "http://someotherdomain.com/service.svc", success: function (responseData, textStatus, jqXHR) { console.log("in"); }, error: function (responseData, textStatus, errorThrown) { alert('POST failed.'); } }); 这是一个跨域的ajax请求。 我收到了针对请求的正确响应,同时使用Firebug进行了检查,我可以看到该响应。 这是我在萤火虫响应中以及通过Web浏览器访问此URL时得到的响应 {"AuthenticateUserResult":"{\"PKPersonId\":1234,\"Salutation\":null,\"FirstName\":\"Miqdad\",\"LastName\":\"Kumar\",\"Designation\":null,\"Profile\":\"\",\"PhotoPath\":\"\/UploadFiles\/\"}"}
  • Python Flas Cors问题(Python Flask Cors Issue)
    问题 我是Python的新手,但是在使用Node应用程序时遇到了同样的问题。 我向本地Python服务器发出了一个非常标准的jQuery AJAX请求: init: function(callback) { var token = _config.get_token(); $.ajax({ url: 'http://localhost:5000/api/ia/v1/user_likes', type: 'POST', contentType: 'application/json', datatype: 'json', data: token }) .done(function(data) { callback(data); }) .fail(function(err) { callback(err); }); callback(token); } 我可以确认变量令牌正在像这样确认: Object {access_token: "791415154.2c0a5f7.4d707361de394512a29682f9cb2d2846", campaign_id: "102"} 但我从我的JavaScript控制台收到此错误: XMLHttpRequest cannot load http://localhost:5000/api/ia/v1/user_likes. No 'Access
  • HttpClient详细使用示例
    HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。 HTTP和浏览器有点像,但却不是浏览器。很多人觉得既然HttpClient是一个HTTP客户端编程工具,很多人把他当做浏览器来理解,但是其实HttpClient不是浏览器,它是一个HTTP通信库,因此它只提供一个通用浏览器应用程序所期望的功能子集,最根本的区别是HttpClient中没有用户界面,浏览器需要一个渲染引擎来显示页面,并解释用户输入,例如鼠标点击显示页面上的某处,有一个布局引擎,计算如何显示HTML页面,包括级联样式表和图像。javascript解释器运行嵌入HTML页面或从HTML页面引用的javascript代码。来自用户界面的事件被传递到javascript解释器进行处理。除此之外,还有用于插件的接口,可以处理Applet,嵌入式媒体对象(如pdf文件
  • JSON+Javascript/jQuery。 如何从json文件导入数据并解析它?(JSON+Javascript/jQuery. How to import data from a json file and parse it?)
    问题 如果我有一个名为names.json的JSON文件,其中包含: {"employees":[ {"firstName":"Anna","lastName":"Meyers"}, {"firstName":"Betty","lastName":"Layers"}, {"firstName":"Carl","lastName":"Louis"}, ]} 我如何在 javascript 中使用它的内容? 回答1 如何做到这一点的一个例子可能是: <html> <head> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $.getJSON('names.json',function(data){ console.log('success'); $.each(data.employees,function(i,emp){ $('ul').append('<li>'+emp.firstName+' '+emp.lastName+'</li>'); }); }).error(function(){ console.log('error'); }); }); </script> <
  • 如何在Android上处理大型JSON对象(How to deal with a large JSON object on Android)
    问题 我正在制作一个运行ASP.NET WebService的Android应用程序。 Webservice发送一个JSON对象,应用程序解析该对象并显示在屏幕上。 在一种情况下,JSON对象太大,并且出现Findered Binder Transaction错误。 我的解决方案是获取该JSON对象并将其嵌入到应用程序代码中,这样就无需从服务器获取该JSON对象。 你能告诉我我可以做的其他事情吗? 还是可以告诉我如何从Webservice获取该JSON对象? 谢谢。 回答1 将大型数据从服务器发送到移动设备。 JSON是轻量级的。 如果您想以更有效的方式传递数据,请分页传递。 如果您想使用比JSON更轻巧的协议,请实施以下google协议,这些协议确实非常有用,并且支持主要语言。 下面是较小的序列化数据结构。 Google的数据交换协议。 1,谷歌协议 2.平面缓冲区 3,纳米缓冲液 希望这对您有用。 回答2 如果数据很大,则尝试将其保存在数据库中,然后使用SQLite对其进行处理。 (但如果动态,则不建议使用) 要解析json对象,请使用gson或jackson。 由于部分解析json数据,这将有助于显着减少内存消耗。 在此处获取杰克逊(Gson)杰森(Gson)https://sites.google.com/site/gson/gson-user-guide http:/