2017-03-16 139 views
1

我需要從複雜的Json結構(具有子對象和層次結構中的數組的對象)中去掉雙引號。我用Java編寫(應用程序將在Android上運行)。Java:如何使用正則表達式從Json鍵中刪除引號

我已經有從Json庫(Gson)產生的字符串,我試圖用正則表達式去掉雙引號,而不是反序列化它回到一個對象,然後在沒有雙引號的情況下序列化它。

我無法找到正確的圖案或圖案來替換它們。

例如JSON:

{ 
"key1":"value1", 
"key2":"555f9ecd-2ced-42b7-b956-33e759bf8db1", 
"key3":false, 
"key4_parent":{ 
"child_key5":"Android", 
"id":"7ae2facc-cdb3-7ae2-facccdb3bb86", 
"name":"danny", 
"bypassed":false 
}, 
"object1":{ 
"deviceType":"Android", 
"id":"7ae2facc-cdb3-7ae2-facccdb3bb86", 
"base64val":"MENPSENJTFpZQzR3b1lvU1pQZTk=", 
"name":"john" 
}, 
"requiredLevel":"PUSH", 
"level":"debug", 
"status":1012, 
"description":"Authentication in progress", 
"objects":[ 
{ 
"deviceType":"Android", 
"id":"7ae2facc-cdb3-7ae2-facccdb3bb86", 
"base64val":"MENPSENJTFpZQzR3b1lvU1pQZTk=", 
"name":"john" 
}, 
{ 
"deviceType":"Android", 
"id":"7ae2facc-cdb3-7ae2-facccdb3bb86", 
"base64val":"MENPSENJTFpZQzR3b1lvU1pQZTk=", 
"name":"john" 
} 
] 
} 

預期輸出:

{ 
key1:"value1", 
key2:"555f9ecd-2ced-42b7-b956-33e759bf8db1", 
key3:false, 
key4_parent:{ 
child_key5:"Android", 
id:"7ae2facc-cdb3-7ae2-facccdb3bb86", 
name:"danny", 
bypassed:false 
}, 
object1:{ 
deviceType:"Android", 
id:"7ae2facc-cdb3-7ae2-facccdb3bb86", 
base64val:"MENPSENJTFpZQzR3b1lvU1pQZTk=", 
name:"john" 
}, 
requiredLevel:"PUSH", 
level:"debug", 
status:1012, 
description:"Authentication in progress", 
objects:[ 
{ 
deviceType:"Android", 
id:"7ae2facc-cdb3-7ae2-facccdb3bb86", 
base64val:"MENPSENJTFpZQzR3b1lvU1pQZTk=", 
name:"john" 
}, 
{ 
deviceType:"Android", 
id:"7ae2facc-cdb3-7ae2-facccdb3bb86", 
base64val:"MENPSENJTFpZQzR3b1lvU1pQZTk=", 
name:"john" 
} 
] 
} 

我知道,輸出將不會是一個有效的JSON。它的目的是爲了便於搜索記錄的目的。

任何幫助將不勝感激!

+2

不要編輯與正則表達式JSON,如果可能的話),如果你真的有,那麼你就必須找到一種簡化,即有一個包含'沒有字符串:' 。然後,你可以嘗試下面的答案几乎任何東西。 –

回答

4

刪除引號我會怎麼做:

  • 找到"([^"]+)":
  • 更換$1:
+0

簡單和偉大的作品!謝謝! – FunkSoulBrother

+0

這是如何工作!?據我瞭解,它選擇了一切,直到下一個''',它不會選擇所有的鍵!?我會使用類似'「[\ w \ d] *?」:' – xander

+0

我已經通過http測試它://www.freeformatter.com/java-regex-tester.html,並且效果很好(現在查看正則表達式,這非常有意義)。我將在今天晚些時候在我的代碼中驗證它,並在此處報告是否有任何 – FunkSoulBrother

1

你可以試試嗎?

jsonStr.replaceAll("\"(\\w+)\":", "$1:")); 

正則表達式從鍵

0

您可以通過使用正則表達式查找:

\"(\w+)\"\: 

並用

$1: 

取代在任何編輯器

和在Java將是

String res = str.replaceAll("\\\"(\\w+)\\\"\\:","\\\\$1:") 
+0

您忘記了密鑰中的數字我猜:)用'[\ w \ d]替換'\ w'' – xander

+0

不,不需要。 –

0

假設有在jsonstr沒有結腸(:),除了作爲鍵 - 值分隔符,您也可以使用lookaheads((?=...)構造函數):

jsonStr.replaceAll("\"(?=.*:)", ""); 
0

嘗試這樣的事:

jsonStr.replace(/\"/g, ''); 
相關問題