我对AWS API网关不熟悉,但关注字符串格式问题,编写简单的解析器将其转换为您需要的任何其他格式并不难。
至于你的描述,我写了一个简单的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()
嗯,API网关的语言SOOO奇怪我的代码应该这样写: { #SET($ PARAMS = $输入“$ param”()。get(“querystring”)) “Data”:{#foreach($ paramName in $ params.keySet())“$ paramName”:“$ util.escapeJavaScript($ params.get($ paramName) )“#if($ foreach.hasNext),#end#end} } 而且我们得到了像这样的东西{ “Data”:{“tracker”:“holy”} } PS:请注意,声明之间没有空白或空格 –