2017-04-27 117 views
0

我有一個字符串化JSON看起來像這樣:Groovy的 - 解析字符串化JSON

{u'a': u'1', u'b': 2, u'c': 3 } 

而我試圖解析爲一個JSON對象。

我一直在使用JsonSlurper用下面的代碼嘗試:

def jsonSlurper = new JsonSlurper() 
    def object = jsonSlurper.parseText(param) 

    object.a 

但它失敗,因爲u的:

Caused by: groovy.json.JsonException: expecting '}' or ',' but got current char 'u' with an int value of 117 

The current character read is 'u' with an int value of 117 
expecting '}' or ',' but got current char 'u' with an int value of 117 
line number 1 
index number 1 
{a': u'1', u'b': 2, u'c': 3} 

如何可以解析這個字符串?

非常感謝

+2

這不是JSON,_ 「字符串化」 _或以其他方式。爲什麼你在密鑰前加上'u'?爲什麼鍵不在雙引號中?爲什麼字符串值不用雙引號?你有什麼JSON表示會是:'{「a」:「1」,「b」:2,「c」:3}' –

+0

確定,但有沒有乾淨的方法來清理呢?我嘗試使用'param.replaceAll('u \'','\'')'但是如果因爲單引號而失敗 – Spearfisher

+2

它從哪裏來?你往往更好地清理上游(這件事情你看),而不是讓你的代碼處理各種瘋狂的邊緣案例 –

回答

0

所以這看起來像有效的Python,而不是JSON。假設你控制已經通過你的數據的Python程序,做這樣的事情在該程序如下:

import json 
json.dumps({u'a': u'1', u'b': 2, u'c': 3 }) 

,如果你不控制Python的,如果你從一個bash管道呼喚你的Groovy腳本,你可以添加以下步驟到你的管道中嗎?

echo "{u'a': u'1', u'b': 2, u'c': 3 }" | python -c "import json, sys, fileinput; print json.dumps(eval((open(sys.argv[1]) if sys.argv[1:] else sys.stdin).read())) " 

在最後一種情況下,你可以調用Python的在Groovy該行...