챗봇 모듈을 제작하면서 이용자의 질문의 의도를 분석하기 위해 외부 api를 이용해서 화자의 질문 의도를 분석하는 기능을 제작하고 있습니다.
그런데 문제는 외부 api에서 반환받는 결과값이 json 타입의 데이터가 아니라 그냥 json 형태의 텍스트 타입 데이터인 것 같습니다.
예를 들면 아래와 같이 반환되는데요.
{"result":0,"return_object":{"orgQInfo":{"orgQUnit":{"strQuestion":"넌 누구야?","strTaggedQ":"너/NP+ㄴ/JX 누구/NP+이/VCP+야/EF+?/SF","ndoc":{"doc_id":"","DCT":"","category":"","category_weight":0.0,"title":{"text":"","NE":""},"metaInfo":{},"sentence":[{"id":0.0,"reserve_str":"","text":"넌 누구야?","morp":[{"id":0.0,"lemma":"너","type":"NP","position":0.0,"weight":0.0732747},{"id":1.0,"lemma":"ㄴ","type":"JX","position":0.0,"weight":0.0121654},{"id":2.0,"lemma":"누구","type":"NP","position":4.0,"weight":0.9},{"id":3.0,"lemma":"이","type":"VCP","position":10.0,"weight":0.0175768},{"id":4.0,"lemma":"야","type":"EF","position":10.0,"weight":0.212983},{"id":5.0,"lemma":"?","type":"SF","position":13.0,"weight":1.0}],"morp_eval":[{"id":0.0,"result":"너/NP+ㄴ/JX","target":"넌","word_id":0.0,"m_begin":0.0,"m_end":1.0},{"id":1.0,"result":"누구/NP+이/VCP+야/EF+?/SF","target":"누구야?","word_id":1.0,"m_begin":2.0,"m_end":5.0}],"WSD":[{"id":0.0,"text":"너","type":"NP","scode":"01","weight":1.0,"position":0.0,"begin":0.0,"end":0.0},{"id":1.0,"text":"ㄴ","type":"JX","scode":"00","weight":1.0,"position":0.0,"begin":1.0,"end":1.0},{"id":2.0,"text":"누구","type":"NP","scode":"00","weight":0.0,"position":4.0,"begin":2.0,"end":2.0},{"id":3.0,"text":"이","type":"VCP","scode":"01","weight":1.0,"position":10.0,"begin":3.0,"end":3.0},{"id":4.0,"text":"야","type":"EF","scode":"00","weight":1.0,"position":10.0,"begin":4.0,"end":4.0},{"id":5.0,"text":"?","type":"SF","scode":"00","weight":1.0,"position":13.0,"begin":5.0,"end":5.0}],"word":[{"id":0.0,"text":"넌","type":"","begin":0.0,"end":1.0},{"id":1.0,"text":"누구야?","type":"","begin":2.0,"end":5.0}],"NE":[],"chunk":[{"id":0.0,"text":"너ㄴ","type":"NP","begin":0.0,"end":1.0,"weight":1.0},{"id":1.0,"text":"누구이야?","type":"VP","begin":2.0,"end":5.0,"weight":1.0}],"dependency":[{"id":0.0,"text":"넌","head":1.0,"label":"NP_SBJ","mod":[],"weight":0.856211},{"id":1.0,"text":"누구야?","head":-1.0,"label":"VNP","mod":[0.0],"weight":0.745083}],"phrase_dependency":[{"id":0.0,"label":"NP_SBJ","text":"넌","begin":0.0,"end":0.0,"key_begin":0.0,"head_phrase":1.0,"sub_phrase":[],"weight":0.0,"element":[]},{"id":1.0,"label":"S","text":"P#0@SBJㄴ 누구야?","begin":0.0,"end":1.0,"key_begin":1.0,"head_phrase":-1.0,"sub_phrase":[0.0],"weight":0.0,"element":[{"text":"누구","label":"NP","begin":2.0,"end":2.0,"ne_type":""},{"text":"야?","label":"VP","begin":3.0,"end":5.0,"ne_type":""}]}],"SRL":[],"relation":[],"SA":[],"ZA":[]}],"entity":[]},"vQTs":[{"qt":2.0,"strQTClue":"누구"}],"vQFs":[{"strQF":"누구","dWeightQF":0.9891}],"vLATs":[],"vSATs":[{"strSAT":"PS_NAME","expanse_SAT":[],"dConfidenceSAT":0.799082},{"strSAT":"DS_DEFINITION","expanse_SAT":[],"dConfidenceSAT":0.193598},{"strSAT":"LCP_COUNTRY","expanse_SAT":[],"dConfidenceSAT":0.191353}],"vSATRoots":[{"strSAT":"PS_OTHERS","expanse_SAT":[],"dConfidenceSAT":0.770934},{"strSAT":"DS_DEFINITION","expanse_SAT":[],"dConfidenceSAT":0.622156},{"strSAT":"LC_OTHERS","expanse_SAT":[],"dConfidenceSAT":0.558027},{"strSAT":"CV_OTHERS","expanse_SAT":[],"dConfidenceSAT":0.503435},{"strSAT":"DT_OTHERS","expanse_SAT":[],"dConfidenceSAT":0.486702},{"strSAT":"ETC","expanse_SAT":[],"dConfidenceSAT":0.463299}],"vTitles":[],"vQTopic":[],"answerConstraint":[],"dIntegrativeConf":0.82884}},"QClassification":{"ansQType":{"strQType4Chg":"단답형","dWeightCQT":0.878654},"vSemQType":[{"strQType4Chg":"사실관계형-속성값요청형","dWeightCQT":0.926432}]}}}int(1)
php에서 json_encode를 사용해서 다시 array에 저장하는 방법도 써보고 json_decode를 사용해보기도 했는데, 결국 배열 또는 stdClass 타입의 데이터로 바꿔서 항목별로 접근하는 게 안되더라구요.
strpos처럼 문자열을 그대로 찾는 건 시간도 좀 걸리고 서버 부하가 좀 걸릴 것 같아서... 되도록이면 array로 접근하려고 했는데... 이 부분 어떻게 해결이 불가능할까요?
부탁드립니다.
맨 뒤에 int(1)이 왜 붙었는지 모르겠지만
아무튼 그것만 빼고 json_decode하면 stdClass로 잘 나오는데요?
json_decode 결과를 print_r이나 var_dump로 찍어보셨나요?
{객체} 부분은 stdClass로 나오고 [배열] 부분은 array로 나오기 때문에 잘 구분해서 쓰셔야 합니다.
json 타입의 데이터라는 것이 따로 존재하지는 않습니다.
json 문법에 맞는 텍스트가 곧 json이지요.