2015-11-26 15 views
6

Her satırın JSON olduğu bir günlük dosyası var. Nedeniyle bazı Nginx güvenlik nedenleriyle, günlükleri onaltılık biçimde kaydedilmiş olan (örneğin Char "X22 \ dönüştürülecektir) İşte JSON hattının bir örnek:.Go - Bir txt dosyasını kod çözme/dönüştürme, okunabilir dizgiye hex karakterleri içerir

{ "body_bytes_sent": "474", "params": {\x22device_id\x22: \x221234567890\x22} } 

Amacım:

  1. dosyayı satır satır okuyun.
  2. okunabilir bir biçimde

    { "body_bytes_sent": "474", "params" : {"device_id": "1234567890"} } 
    
  3. her satırı dönüştürme Bu str dönüştürün JSON nesnesine girerek, onu manipüle edebildim.

Herhangi bir yardım için teşekkür ederiz.

cevap

4

Normal bir birine dizeyi dönüştürmek için strconv.Unquote kullanabilirsiniz:

package main 

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

func main() { 

    // this is what your input string looks like... 
    qs := "{\\x22device_id\\x22: \\x221234567890\\x22}" 

    // now let's convert it to a normal string 
    // note that it has to look like a Go string literal so we're 
    // using Sprintf 
    s, err := strconv.Unquote(fmt.Sprintf(`"%s"`, qs)) 
    if err != nil { 
     panic(err) 
    } 
    fmt.Println(s) 

    // just for good measure, let's see if it can actually be decoded. 
    // SPOILER ALERT: It decodes just fine! 
    var v map[string]interface{} 
    if err := json.Unmarshal([]byte(s), &v); err != nil { 
     panic(err) 

    } 
    fmt.Println(v) 
} 

Playground

+0

Teşekkür! Soruyu açıkladığım vaka için bana bir çözüm getiriyor, ancak dize geçerli ve geçerli olmayan JSON'un bir karışımı olduğunda durumu çözmüyor. Güncellenmiş sorumu görün. Tekrar teşekkürler! BTW, bunun nedeni, nginx'in yalnızca talep vücut paramlarını kodlamasıdır. – Asaf

+0

@Asaf: Neden "geçerli ve geçerli olmayan JSON karışımı" üzerinde Not_a_Golfer'ın kodu başarısız olmamalı? – Volker

+0

@Not_a_Golfer 'in kodunu çalıştırırsam, bu satırda "geçersiz sözdizimi" hatası alıyorum, err: = strconv.Unquote (fmt.Sprintf ("% s", qs)) – Asaf

İlgili konular