2014-03-28 6 views
2

파이썬에서 kazoo 라이브러리를 사용하면서 파이썬 및 사육사와 함께 작업하고 있습니다. 이 질문은 사육사 또는 카주 도서관에 관한 것이 아닙니다. 나는 이것이 주로 파이썬과 관련이 있다고 생각한다.파이썬에서 바이트 json 문자열을 나타내는 법

new_error_str = "Error occurred on machine %s in datacenter %s on the %s of process %s" % (host_info, local_dc, step, process_name) 
new_error_key = "error_%s" % (timestamp_in_ms) 

그리고 지금은 너무 아래 사육사 노드의 데이터가 그대로 그 JSON 문자열을 쓰기 다음 바이트 JSON 문자열을 만들기 위해이 두 변수를 사용합니다 - 아래

내 두 변수 우리는 노드를 만들뿐만 아니라 데이터를 기록하는 구문 -

TypeError: value must be a byte string 
-

zk.create(date_znode_path, b'{"'+new_error_key+'":"' + new_error_str + '"}', None, True) 

든 상기 라인으로 예외를 발생

어떤 생각을 잘못하고 있니? 위 변수의 JSON String을 만들려고합니다. kazoo library

업데이트에 대한

여기

입니다 세부 사항 : -이 구문을 사용하는 경우

는, 그것은 잘 작동 -

b'{"hostname":"' + get_hostname() + '"}', None, True) 

이 같은 데이터를 볼 수 있습니다 -

{"hostname":"machineA"} 

답변

2

j 아들 모듈 :

import json 
zk.create(date_znode_path, json.dumps({new_error_key : new_error_str}, ensure_ascii=True), None, True) 

json을 수동으로 생성하는 것은 까다 롭습니다. 입력에 따옴표가 있으면 어떻게해야합니까? 모든 것을 피할 수 있고 모든 엣지 경우에 대해 잘 테스트 된 도구를 사용하는 것이 항상 좋습니다.

+1

'bytes' 생성자는 문자열을 전달하면 오류가 발생합니다. 두 번째'encoding' 인자를 넘겨 줄 수는 있지만'str.encode'를 사용하면 더 명확해질 수 있습니다. – Blckknght

+0

Python 버전 2.7.3을 실행 중이고 예제로 질문을 업데이트했습니다. –

+0

제 답변을 수정했습니다. 인코딩을 할 때 json을 수동으로 생성하는 것은 까다 롭습니다.이 작업을 위해 만들어진 도구에 위임하는 것이 가장 좋습니다. ;) –