2016-09-08 5 views
0

ではないですが、私は、APIゲートウェイを介してキネシスへAWS API Gatewayのクエリ文字列は、AWS APIゲートウェイでは、JSON形式

#set($querystring = $input.params().querystring) 
"Data": "$util.base64Encode($querystring)" 

を全体クエリ文字列を渡したいが、キネシスレコードから取り出したデータは、{tracker_name =」のようになります。 xxxx、tracker = yyyy} '、これはjson文字列形式ではないので、aws lambda(Pythonエンジン)のjson文字列にするために、この変な文字列を特別に扱う必要があります。いいアイデア?

答えて

1

私はAWS API Gatewayに詳しくはありませんが、文字列の書式設定の問題に焦点を当てて、簡単なパーサーを作成して他の形式に変換するのは難しくありません。

あなたの説明として、私は単純なPythonパーサーを書いて、あなたにいくつかのアイデアを与えることができれば幸いです。それを使用するには

class MyParser: 

def __init__(self, source): 
    # the source string 
    self.source = source 
    # current position 
    self.at = 0 
    # current character 
    self.ch = source[0] if len(source) > 0 else '' 

def error(self, msg): 
    '''Print an error message and raise an exception''' 

    print '-- Parser abort due to a fatal error: \n-- %s' % msg 
    raise ValueError() 

def check_char(self, expected): 
    ''' 
    Check if current character is same as the given character. 
    If not, raise an exception. 
    ''' 

    if self.at >= len(self.source): 
     self.error('At position %d: %c expected, but reached string end' % (self.at, expected)) 
    elif self.ch != expected: 
     self.error('At position %d: %c expected, but %c given' % (self.at, expected, self.ch)) 

def next_char(self): 
    '''Move on to next character in source string.''' 

    self.at += 1 
    self.ch = self.source[self.at] if len(self.source) > self.at else '' 
    return self.ch 

def eat_spaces(self): 
    '''Eat up white spaces.''' 

    while self.ch == ' ': 
     self.next_char() 

def parse_string(self): 
    '''Parse a string value.''' 

    s = '' 
    while self.ch != '=' and self.ch != ',' and self.ch != '}' and self.at < len(self.source): 
     s += self.ch 
     self.next_char() 
    return s.strip() 

def parse_object(self): 
    '''Parse an object value.''' 

    obj = {} 

    # eat '{' 
    self.next_char() 
    self.eat_spaces() 

    while self.ch != '}': 
     if self.at >= len(self.source): 
      self.error('Malformed source string') 

     key = self.parse_string() 
     # eat '=' 
     self.check_char('=') 
     self.next_char() 
     val = self.parse_value() 
     obj[key] = val 
     # eat ',' 
     if self.ch == ',': 
      self.next_char() 
     self.eat_spaces() 

    # eat '}' 
    self.next_char() 

    return obj 

def parse_value(self): 
    '''Parse a value.''' 

    self.eat_spaces() 
    if self.ch == '{': 
     return self.parse_object() 
    else: 
     return self.parse_string() 

def parse(self): 
    '''Let the game begin.''' 

    self.eat_spaces() 
    if self.ch != '{': 
     self.error('Source string must begin with \'{\'') 
    else: 
     return self.parse_value() 

MyParser('{tracker_name=xxxx, tracker=yyyy}').parse() 
+0

うーん、APIゲートウェイの言語は、私にはすっごく奇妙で、コードはこのように記述する必要があります: { の#set($のparams = $入力$ paramName ":" $ util.escapeJavaScript($ paramsName($ paramName)); $ params.get($ paramName): "$ param" ) "#if($ foreach.hasNext)、#end#end} } と私たちはのようなものを得ました{ "データ":{"トラッカー": "聖なる"} } PS:ステートメントの間に空白もスペースもないことに注意してください –

関連する問題