2016-04-10 17 views
1

Ich erhalte diese Art der Antwort von der URL, die ich schlagen und ich brauche diese zu analysieren, um die gewünschte HTML zu erhalten.Wie Parsen HTTP.GET Antwort in Golang

this = Ajax ({ "htmlInfo": "SOME-HTML", "Otherinfo": "Blabla", "Moreinfo": "Bleh Bleh"})

Wie oben erwähnt, Ich habe drei Schlüsselpaarwerte, von denen ich "SOME-HTML" bekommen muss, wie bekomme ich das und das Hauptproblem ist, dass "SOME-HTML" Escape-Zeichen hat. Unten ist die Art der Antwort, dass das vorhanden sein wird.

\ u003Cdiv class = \ u0022container Spalten-2 \ u0022 \ u003E \ n \ n \ u003Csection class = \ u0022col-main \ u0022 \ u003E \ n \ r \ n \ u003Cdiv class = \ u0027visor-Artikel- Liste Liste list-view-recent \ u0027 \ u003E \ r \ n \ u003Cdiv class = \ u0027grid_item Visier-Artikel-teaser list_default \ u0027 \ u003E \ n \ u003Ca class = \ u0027grid_img \ u0027 href = \ u0027/MANUNITED-IS- the-best \ u0027 \ u003E \ n \ u003Cimg src = \ u0022http: //www.xyz.com/sites//files/styles/w400h22

Kann jemand bitte mir in dieser Hinsicht helfen. Ich bin mir nicht sicher, wie ich das angehen soll.

Vielen Dank im Voraus.

+0

Bitte bearbeiten und die Frage klarer machen, so ist es einfacher für Menschen, die Ihnen zu helfen. Was war das Schlüssel-Wert-Paar? War es Javascript? Wie benutzt du es mit Go? Stellen Sie Go-Code und echte Informationen zur Verfügung als nur "EINIGE HTML", "Blah Blah" und "Bleh Bleh". – PieOhPah

Antwort

1

Der einfachste Weg ist, das JSON zu extrahieren und es dann in eine Struktur zu entpacken. Die \uXXXX Teile sind Unicode-Zeichen

package main 

import (
    "encoding/json" 
    "fmt" 
    "regexp" 
) 

// Data follows the structure of the JSON data in the response 
type Data struct { 
    HTMLInfo string `json:"htmlInfo"` 
    OtherInfo string `json:"otherInfo"` 
    MoreInfo string `json:"moreInfo"` 
} 

func main() { 
    // input is an example of the raw response data. It's probably a []byte if 
    // you got it from ioutil.ReadAll(resp.Body) 
    input := []byte(`this=ajax({"htmlInfo":"\u003Cdiv class=\u0022container columns-2\u0022\u003E\n\n \u003Csection class=\u0022col-main\u0022\u003E\n \r\n\u003Cdiv class=\u0027visor-article-list list list-view-recent\u0027 \u003E\r\n\u003Cdiv class=\u0027grid_item visor-article-teaser list_default\u0027 \u003E\n \u003Ca class=\u0027grid_img\u0027 href=\u0027/manUnited-is-the-best\u0027\u003E\n \u003Cimg src=\u0022http://example.com/sites//files/styles/w400h22", "otherInfo": "Blah Blah", "moreInfo": "Bleh Bleh"})`) 

    // First we want to extract the data json using regex with a capture group. 
    dataRegex, err := regexp.Compile("ajax\\((.*)\\)") 
    if err != nil { 
     fmt.Println("regex failed to compile:", err) 
     return 
    } 

    // FindSubmatch should return two matches: 
    // 0: The full match 
    // 1: The contents of the capture group (what we want) 
    matches := dataRegex.FindSubmatch(input) 
    if len(matches) != 2 { 
     fmt.Println("incorrect number of match results:", len(matches)) 
     return 
    } 
    dataJSON := matches[1] 

    // Since the data is in JSON format, we can unmarshal it into a struct. If 
    // you don't care at all about the fields other than "htmlInfo", you can 
    // omit them from the struct. 
    data := &Data{} 
    if err := json.Unmarshal(dataJSON, data); err != nil { 
     fmt.Println("failed to unmarshal data json:", err) 
    } 

    // You now have access to the "htmlInfo" property 
    fmt.Println("HTML INFO:", data.HTMLInfo) 
} 

Welche produzieren:

HTML INFO: <div class="container columns-2"> 

<section class="col-main"> 

<div class='visor-article-list list list-view-recent' > 
<div class='grid_item visor-article-teaser list_default' > 
<a class='grid_img' href='/manUnited-is-the-best'> 
<img src="http://example.com/sites//files/styles/w400h22