O erro parece claro para mim, a variável "i" é uma string, pois o loop for
itera sobre o valor do dict / mapping "customer". Esse valor é um próprio ditador / mapeamento e iterar sobre ele irá levá-lo a sucessão da lista de chaves (ou seja, ["propriedades"].
cat Customer.json | python -c 'import sys; import simplejson as json; \
print "\n".join( [i for i in json.loads( sys.stdin.read() )["customer"]["properties"] ] )'
vai te dar
customerid
name
e o seguinte deve aproximá-lo do seu objetivo:
cat Customer.json | python -c 'import sys; import simplejson as json; \
print "\n".join( ["{} {}".format(k, v) for k,v in json.loads( sys.stdin.read() )["customer"]["properties"].iteritems() ] )'
que dá:
customerId {'index': 'not_analyzed', 'type': 'string'}
name {'index': 'not_analyzed', 'type': 'string'}
De lá, eu recomendo que você realmente faça o python em um script. Você terá que decidir como ir de string
a String
e fazer a formatação adicional. Um multiliner é sempre mais fácil de depurar (caso seja comprovado pela sua pergunta) e pode ser mantido e fornece mensagens de erro mais significativas (números de linha).