2016-12-23 1 views
-1

Java JSON 객체를 가지고 있는데 그 형식은 [{a = b}]입니다.이 객체를 JSON 객체로 자바 스크립트에 전달하려고합니다. 키 값뿐만 아니라, "="대신 갖는 "" '잘못된 형식의'자바 json 객체를 자바 스크립트로 변환합니다.

다른 서비스에 의해 소비 될 수이 JAVA JSON 객체를 변환하는 간단한 방법이

파싱은 매우 복잡 할 증명? 실제 JSON은 중첩되어 있으며 중첩에 대한 인용 부호가없고 부족함을 나타냅니다.

'JSON'데이터 샘플 :

[{wwnType = 가상, serialNumberType = 가상, 연결 = [], 수정 된 = 2016-10-29T19 : 00 : 04.457Z, macType = 가상, 범주 = 서버 프로필 템플릿, serverHardwareTypeUri =/나머지/하드웨어 유형/32006464-D3C6-4B4E-8328-47A193C6116C, bios = {overriddenSettings = [], manageBios = false}, firmware = {firmwareBaselineUri = null, manageFirmware = false, forceInstallFirmware = false, firmwareInstallType = null}, boot = { bootMode = null, 상태 = null, affinity = Bay, localStorage = {controllers = []}, type = ServerProfileTemplateV1, status = true, order = [CD, 플로피, USB, 하드 디스크, PXE]}, hideUnusedFlexNics = OK, description =, eTag = 1477767604457/1, serverProfileDescription = 테스트, 이름 = 테스트, created = 2016-10-29T19 : 00 : 04.428Z, enclosureGroupUri =/rest/enclosure-groups/e989621b-930e-40e7-9db0-a6ddbf841709 , uri =/rest/server-profile-templates/db1dbdcc-4237-4452-acc3-cf9dfdc75365, sanStorage = {manageSanStorage = false, volumeAtta chments = []}}]

감사합니다.

답변

1

단순하지 않을 것입니다. 그러나 토큰 화기 또는 어휘 분석기를 작성하여 입력 문자열을 토큰으로 분리 할 수있는 한 본격적인 파서를 작성하지 않고도이 작업을 수행 할 수 있다고 생각합니다. 기본 계획은 다음과 같습니다.

  1. 입력 내용을 토큰 목록으로 변환하십시오. 입력 형식이 무엇인지 알지 못하므로 직접 분석해야합니다. 토큰은 단일 문자와 같을 것입니다. [, ], {, }, 쉼표, =; 또는 식별자 (예 : a 또는 b)가 있지만 가능한 형식이 무엇인지 알 수 없습니다. 또는 따옴표로 묶인 문자열 리터럴 또는 필요에 따라 숫자 리터럴을 사용할 수 있습니다.

  2. 문자열을 확인하고 필요한 토큰을 교체하십시오. 귀하의 예제를 기반으로, 나는 그 후 { : 첫 번째 토큰이 식별자 인 경우이를 따옴표로 묶어야한다고 말하고 싶습니다. 그 후 두 번째 토큰이 =이면 :으로 변경하십시오. 그 뒤에 세 번째 토큰이 식별자 인 경우 따옴표로 묶으십시오. 쉼표 뒤에도 마찬가지 일 수 있지만 쉼표가 객체의 키 - 값 쌍 목록이나 배열의 값 목록에 대한 구분 기호인지 여부를 추적해야합니다. 이를 위해서는 [ 또는 {이 표시 될 때마다 누를 스택을 유지해야하며 } 또는 ]이 표시 될 때마다 팝업되어 개체 또는 배열 내에 있는지 알 수 있습니다.

  3. 모든 것을 바꾼 후에 토큰을 다시 연결하십시오. 결과는 올바른 형식의 JSON 객체 여야합니다.

본인의 요구 사항을 모두 모르기 때문에 대략적인 개요입니다. 당신은 아마도 당신의 정확한 필요를 충족시키기 위해이 대답을 적응시켜야 할 것입니다. 그러나 이것이 당신이 어떻게 문제에 접근 할 수 있는지에 대한 일반적인 아이디어로 도움이되기를 바랍니다.

죄송 합니다만, 파서 생성기 (Yacc equivalent for Java 참조)를 살펴 보려는 경우를 제외하면 더 간단한 대답이라고 생각하지 않습니다. Java에서 실제로 어떤 것도 보지 않았으므로 사용하기가 얼마나 쉬운 지 알지 못합니다. 제발 regexes로 모든 것을 해결하려고하지 마십시오. (Regexes는 문자열을 토큰으로 깨는 데 유용 할 것이지만 정규 표현식으로 그 이상을하려고하면 편두통 이외의 것을 생성하지 않을 것입니다.)

0

json 객체가 아닌 것 같습니다. json 객체는 이렇게되어야합니다.

예 :

JSONObject obj = new JSONObject(); 
obj.put("a", "b"); 
obj.put("name", "your name"); 

출력 : { "A" "B", "이름": "당신의 이름"}

var obj = '{"a": "b", "name":"your name"}', 
var json = JSON.parse(obj); 
+0

내가하지 않는 자바 스크립트로 전달

을 당신이 그 질문을 이해했다고 생각합니다. – ajb

관련 문제