2015-11-26 7 views
6

में एक लॉग फ़ाइल मिली है, जहां प्रत्येक पंक्ति JSON है। कुछ Nginx सुरक्षा कारणों से, लॉग हेक्साडेसिमल स्वरूप में सहेजी जा रही हैं (उदाहरण के लिए चार "\ X22 में परिवर्तित हो जाएगा) यहाँ एक JSON लाइन का एक उदाहरण है:।जाओ - एक txt फ़ाइल को डीकोड/कनवर्ट करने के लिए हेक्स वर्णों को पठनीय स्ट्रिंग

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

मेरा लक्ष्य:

  1. लाइन द्वारा फ़ाइल लाइन पढ़ें।
  2. एक पठनीय प्रारूप

    { "body_bytes_sent": "474", "params" : {"device_id": "1234567890"} } 
    
  3. को प्रत्येक पंक्ति में कनवर्ट इस str कन्वर्ट एक JSON ऑब्जेक्ट में प्रवेश करना ताकि मैं इसे कुशल बना सकूं।

किसी भी मदद की सराहना की जाएगी।

उत्तर

4

आप एक सामान्य से एक के लिए स्ट्रिंग में कनवर्ट करने strconv.Unquote उपयोग कर सकते हैं:

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

धन्यवाद! यह मुझे मेरे प्रश्न का वर्णन करने के मामले का समाधान देता है, लेकिन यह स्ट्रिंग एक वैध और गैर-मान्य JSON का मिश्रण होने पर केस को हल नहीं करता है। मेरा अद्यतन प्रश्न देखें। एक बार फिर धन्यवाद! बीटीडब्ल्यू, ऐसा इसलिए होता है क्योंकि nginx केवल अनुरोध शरीर पैराम एन्कोड करता है। – Asaf

+0

@Asaf: Not_a_Golfer का कोड "वैध और गैर-मान्य JSON के मिश्रण" पर क्यों विफल नहीं होना चाहिए? – Volker

+0

यदि मैं @Not_a_Golfer के कोड को चलाता हूं, तो मुझे इस पंक्ति पर त्रुटि "अमान्य वाक्यविन्यास" मिलती है, त्रुटि: = strconv.Unquote (fmt.Sprintf ("% s", qs)) ' – Asaf

संबंधित मुद्दे