波括弧({と})で囲まれた「カンマ区切りのJSONデータ」をJSONデータの配列として取得する
インプットとなるデータの形式は次。
それぞれのJSONデータは次の形式。
{"key1":"value1","key2":"value2"}
つまり具体的には次のような形式のデータがインプットとなる(今回これは文字列でtargetStrという変数としておく)。
{"key11":"value11","key12":"value12"},{"key21":"value21","key22":"value22"},{"key31":"value31","key32":"value32"},・・・・,{"keyN1":"valueN1","keyN2":"valueN2"}
さて、カンマで区切られたそれぞれのJSONデータ(例えば{"key11":"value11","key12":"value12"})は、pythonで次のように書くとdictionaryに変換可能。
※)JSONデータの両端を「'」で囲んで文字列にしていることに注意
json.loads('{"key11":"value11","key12":"value12"}')
これらのJSONデータのリストは、関数getJsonPairListを作成して次のようにして取得。
targetStr = '{"key11":"value11","key12":"value12"},{"key21":"value21","key22":"value22"},{"key31":"value31","key32":"value32"},・・・・,{"keyN1":"valueN1","keyN2":"valueN2"}' jsonPairList = getJsonPairList(targetStr, 0, []) def getJsonPairList(targetStr, searchStartIndex, resultList): if searchStartIndex<len(targetStr): startIndex = targetStr.find("{", searchStartIndex) endIndex = targetStr.find("}", searchStartIndex) resultJson = "{" + targetStr[startIndex+1 : endIndex] + "}" resultList.append(resultJson) searchStartIndex = endIndex+1 return getJsonPairList(targetStr, searchStartIndex, resultList) else: return resultList
targetStr.split(",")などとしてsplitして作成する方法も考えたが、valueが[1,2,3,・・・,M]の形式なので止めた。
targetStr.split("},")とすれば出来ないことは無いが、再帰で書こうと思ったので、いったんこれでメモ。
今回の自分の用途にはこれで良い。。。