繁体   English   中英

将HTML有效内容解析为JSON

[英]Parse HTML payload to JSON

我遇到以下有效负载的问题。

我通过API调用在Node.js后端上收到的有效负载如下。

{
  "id": "1",
  "content":{
     "text": "
         <body>
           <div>
             <table>
               <thead>
                <tr>
                    <th><strong>Header 1</strong></th>
                    <th><strong>Header 2</strong></th>
                </tr>
               </thead>
                <tbody>
                 <tr>
                    <td>question 1</td>
                    <td>answer 1</td>
                 </tr>
                 <tr>
                    <td>question 2</td>
                    <td>answer 2</td>
                 </tr>
                 <tr>
                    <td>question 3</td>
                    <td>answer 3</td>
                 </tr>
                </tbody>
             </table>
           </div>
         </body>
         "
   }
}

所以在这里我将响应存储如下:

var response = data

即数据是JSON响应

而且我将HTML数据保存如下

var HTMLContentText = response.content.text

结果,我将得到:

         <body>
           <div>
             <table>
               <thead>
                <tr>
                    <th><strong>Header 1</strong></th>
                    <th><strong>Header 2</strong></th>
                </tr>
               </thead>
                <tbody>
                 <tr>
                    <td>question 1</td>
                    <td>answer 1</td>
                 </tr>
                 <tr>
                    <td>question 2</td>
                    <td>answer 2</td>
                 </tr>
                 <tr>
                    <td>question 3</td>
                    <td>answer 3</td>
                 </tr>
                </tbody>
             </table>
           </div>
         </body>

在这里我要执行以下操作

  1. 将HTML文本解析为一个对象
  2. 从响应中获取表,即select(“ table”)。first();
  3. 获取表的行,即select(“ tr”)

我在JAVA中有相同的代码。

这里仅供参考。 在这里,我使用Jsoup解析器执行所有操作。 我现在想用Java语言执行所有操作。

        // HTML as text (from JSON)
        String HtmlFormattedText = (String)((JSONObject)JsonObject.get("content")).get("text");

        // parse the html text into an object
        Document HtmlFormattedDocumentObject = Jsoup.parse(HtmlFormattedText);

        // get the table from the response
        Element allRowsFromTable = HtmlFormattedDocumentObject.select("table").first();

        // get the rows of the table
        return allRowsFromTable.select("tr");

我为此创建了一个代码段。 函数的返回值包含表的所有tr元素-您无需首先选择表。

 const response = { "id": "1", "content": { "text": ` <body> <div> <table> <thead> <tr> <th><strong>Header 1</strong></th> <th><strong>Header 2</strong></th> </tr> </thead> <tbody> <tr> <td>question 1</td> <td>answer 1</td> </tr> <tr> <td>question 2</td> <td>answer 2</td> </tr> <tr> <td>question 3</td> <td>answer 3</td> </tr> </tbody> </table> </div> </body> ` } } // logging the result of the function console.log(parseTable(response.content.text)) function parseTable(string) { // creating an HTML element const el = document.createElement('html') // adding the string to the HTML element el.innerHTML = string // selecting and returning all tr elements return el.getElementsByTagName('tr') } 

注意:我将单引号更改为反引号 ,因为它允许多行字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM