Prolog에서 간단한 웹 서비스로 작업하고 있으며 사용자에게 JSON 형식의 데이터로 응답하고 싶습니다. 좋은 기능은 reply_json_dict/1
입니다. 사전을 가져 와서 잘 형식화 된 JSON 본문을 사용하여 HTTP 응답으로 변환합니다.swi-prolog에서 사전 사용하기
제 문제는 응답 사전 자체를 작성하는 것이 약간 번거로운 것 같습니다. 예를 들어 일부 데이터를 반환 할 때 데이터 ID가 있지만 데이터 속성 (가능하면 언 바운드 변수)이 있거나 없을 수 있습니다. 나는 쉬운 방법을 찾고 있어요 ... 잘 작동하므로 출력 Props
가 바인딩 여부 따라 { "id" : "III" }
또는 { "id" : "III", "attributes" : "AAA" }
이지만,
OutDict0 = _{ id : DataId },
(nonvar(Props) -> OutDict1 = OutDict0.put(_{ attributes : Props }) ; OutDict1 = OutDict0),
reply_json_dict(OutDict1)
: 순간 나는 다음을 수행합니다. 주로 내가 더 선택 키/값 쌍을 추가해야하는 경우 때문에, 내가 좋아하는 여러 의미로 끝날 :
OutDict0 = _{ id : DataId },
(nonvar(Props) -> OutDict1 = OutDict0.put(_{ attributes : Props }) ; OutDict1 = OutDict0),
(nonvar(Time) -> OutDict2 = OutDict1.put(_{ time : Time }) ; OutDict2 = OutDict1),
(nonvar(UserName) -> OutDict3 = OutDict2.put(_{ userName : UserName }) ; OutDict3 = OutDict2),
reply_json_dict(OutDict3)
그리고 그것은 단지 잘못된 것 같습니다. 더 간단한 방법이 있습니까?
건배, 제이 섹 대신 사전 덤비는의
이 입력으로 해결해 주셔서 감사합니다! 그래도 문제는 여전히 남아 있습니다. 필요한 목록이 이미있는 경우에도 왜 사전을 만드시겠습니까? dicts는 Prolog의 표준 기능이 아니기 때문에 dict을 사용할 때마다 dict를 사용할 때마다 응용 프로그램의 이식성이 떨어집니다. – mat
좋은 점은 비록 현재 이식성에 대해 덜 우려하고 있지만. dict에 대한 좋은 점은 키를 고유하게 유지하므로 JSON 객체에 매핑하는 것이 더 자연 스럽습니다. JSON 표준은 고유하지 않은 키를 허용하지만 많은 라이브러리는 그렇지 않으므로 고유하게 유지하는 것이 좋습니다. – Jacek
'findall'의 첫 번째 인수에서'Key = Value'를 괄호로 묶지 않아도됩니다. –