JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?안녕 모두,
JMP 15를 사용하고 있으며 Http Request()를 통해 JSON 페이로드를 검색하고 Char를 통해 Blob()으로 실행한 다음 데이터 테이블에서 open()하는 JSL이 있습니다. JSON 페이로드 콘텐츠는 동적이지만 항상 테이블 형식(행 및 열)에 매핑할 수 있습니다.
문제: JSON의 키에 모두 NULL 값이 있는 경우 데이터 테이블에 포함되지 않습니다(즉, 이러한 키에 대해 생성된 열이 없음). 모든 값이 NULL인지 여부에 관계없이 JSON의 모든 키가 데이터 테이블의 열로 표시되기를 원하기 때문에 이것은 문제가 됩니다.
페이로드를 로컬 파일에 저장하고 Open()을 사용하여 직접 열면 원하는 결과를 얻습니다. 모든 키가 열로 변환되고 모든 NULL 값이 NULL로 표시되는 데이터 테이블입니다. 그러나 이것은 내 사용 사례에서 작동하지 않습니다.
다음은 문제를 복제하는 기본 JSL입니다. Http Request() 대신 Load Text File()을 사용하여 데이터를 가져오는데 동일한 결과가 나타납니다. "data.json" 파일이 첨부되어 있습니다.
dt1 = Open("/Users/abc/data.json", JSON ); // works as desired
raw = Load Text File("/Users/abc/data.json");
jsonblob = Char To Blob( raw );
dt2 = open(jsonblob, "JSON", Guess("wide")); // does not work as desired -- drops all-NULL columns누구든지 변수의 JSON을 모두 NULL 키를 유지하는 데이터 테이블로 변환하는 방법을 제안할 수 있습니까?
감사해요!
앤디
결과 공유 및 소통Re: JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?요소가 없는 JSON 배열은 JMP에서 문제가 됩니다.한 가지 옵션은 빈 배열을 자식이 하나 이상 있는 배열로 바꾸는 것입니다.해당 자식을 null로 만들거나 누락된 값 문자([.])를 사용할 수 있습니다.이는 더 이상 유효한 JSON이 없지만 JMP 16이 계속 읽을 것이며 현재로서는 해당 동작을 중단할 계획이 없다는 것을 의미한다고 생각합니다.null을 사용하면 문자 열이 생성되고 누락된 값을 사용하면 숫자 열이 생성됩니다.JSON에 []가 포함된 문자열 데이터가 없다는 것을 알고 있다면 간단히 이렇게 변경할 수 있습니다.
raw = Load Text File("$downloads/data.json");
jsonblob = Char To Blob( substitute(raw,"[]",".") );
dt2 = open(jsonblob, "JSON", Guess("wide"));
JSON 문자열에서 []를 교체하지 않도록 보호하려면 문자열을 건너뛰기 위해 jsl의 몇 줄이 더 필요하지만 여전히 너무 어렵지는 않아야 합니다.
Re: JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?메모 감사합니다. @Craige_Hales .JMP의 향후 릴리스에서 고려할 수 있도록 글머리 기호 1에 언급된 결함을 개발 팀에 보고했습니다.
그만한 가치가 있는 것은 JMP 14.3에서 null 열을 삭제하지 않는 것 같습니다.
raw = Load Text File( "$DOWNLOADS/data.json" );
jsonblob = Char To Blob( raw );
dt2 = Open( jsonblob, "JSON", Guess( "wide" ) );
JSON To Data Table( raw, Guess( "wide" ) );
Re: JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?그리고 json의 소스를 제어할 수 있고 실제 pandas 형식으로 얻을 수 있는 경우,
orient='table' (in python code)
좋은 선택이 될 수 있습니다. JMP의 가져오기는 해당 메타데이터 중 일부를 사용할 수 있습니다. JMP는 다른 방향도 읽을 수 있습니다.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_json.html
Re: JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?- 좋습니다. 와이드 옵션이 사용하기에 올바른 옵션이라고 생각하며 모든 누락된 열이 가져오기에서 제거되는 버그입니다.@Wendy_Murphrey 확실히 일이 복잡해집니다.
- 가능한 모든 열을 알고 있고 하위 집합만 JSON에 있는 경우 JSON 설정에 모두 나열할 수 있습니다. 먼저 작은 테스트를 수행하고 필요한 방식으로 작동하는지 확인합니다(전체 열 집합을 얻을 수 있는지 아니면 JSON에 표시되는 하위 집합만 얻을 수 있는지 잘 모르겠습니다.)
- 여전히 이전 버전의 JSON 가져오기 코드에 액세스할 수 있습니다. JSON을 지정하면(JSON SETTINGS 또는 Guess 매개변수 없이) 원하는 대로 할 수 있습니다.
blob=loadtextfile("$DESKTOP/data.json",blob);
Open(blob,JSON)- JSON은 pandas 형식과 정확히 같지 않습니다. 그러나 pandas 옵션은 원하는 열 이름을 검색하는 것 같습니다. 아무것도 작동하지 않는 경우 실제로 데이터를 가져오기 위해 두 번째 가져오기를 위해 즉석에서 JSON 설정을 생성하기 위한 시작점이 될 수 있습니다.
- 내가 알고 있는 JSON 설정에 대한 특정 문서가 없습니다. 마법사에 의해 작성되고 여전히 사람이 읽을 수 있습니다. 마법사 대화 상자 값과 일치하며 거기에 일부 문서가 있습니다.
- ImportSettings가 CSV 가져오기에 사용되거나 다른 것으로 사용된다고 확신합니다. JSON 마법사에서는 사용되지 않습니다.
(업데이트: 몇 가지 작은 편집)
Re: JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?제안 주셔서 감사합니다, Craige. 나는 그것들을 시도했고 몇 가지 후속 질문이 있습니다.
1. Guess를 "wide"에서 "pandas"로 변경하면 데이터 테이블에 NULL 열이 성공적으로 포함됩니다. 안타깝게도 새로운 문제가 발생합니다. JSON 데이터의 마지막 "행"이 데이터 테이블의 모든 행에 대해 반복됩니다( 첨부된 "pandas.png" 참조 -- 로트 번호 21055는 두 번 반복되며 로트 번호 21054는 포함되지 않습니다. 더 큰 데이터 세트로 이와 동일한 동작을 복제했습니다.
이를 수정할 수 있는 다른 Open() 매개변수 또는 구성이 있습니까?
2. 마법사를 사용하여 NULL 열을 포함하여 data.json 파일을 성공적으로 가져올 수 있었습니다. 그러나 생성된 스크립트는 data.json의 페이로드에 따라 다릅니다(첨부된 "script_view.png" 참조). 내 사용 사례는 더 일반적입니다. 내 JSL이 수신하는 페이로드는 열 및 열 레이블 수에 따라 다릅니다. 보다 일반적인 구성 옵션을 생성하기 위해 마법사의 출력을 사용하는 방법이 있습니까? 아니면 페이로드를 수동으로 반복하고 데이터 테이블을 열별로 구성하는 유일한 옵션입니까?
2b. 이와 관련하여 Open()과 함께 "JSON 설정" 매개변수를 사용하는 데 대한 문서를 알려줄 수 있습니까? Syntax Reference 또는 Scripting Index에서 아무 것도 찾을 수 없습니다(Google에서 'JMP JSL "JSON 설정"'을 검색하면 이 포럼에서 가장 많이 검색된 질문이 이전 질문임).
3. Open()이 빈 열을 숫자로 가져오도록 하는 방법이 있습니까? 가져오기 설정에서 "빈 열을 숫자로 처리(1)"를 시도했는데 이로 인해 data.json 파일이 한 줄/레코드로 처리되었습니다(첨부된 "pandas_numeric.png, 참조). 뭔가 잘못되었습니다.
감사해요!
앤디
Re: JSON에서 데이터 테이블로: NULL 열이 자동으로 삭제되는 것을 방지하는 방법은 무엇입니까?아래에 도움이 될 수 있는 답변을 작성한 후 먼저 시도해야 할 간단한 답변이 있다는 것을 깨달았습니다. 데이터는 pandas 형식 중 하나 인 것 같으므로 "wide"를 "pandas"로 변경하십시오.
그것이 잘못된 것으로 판명되면 시도하십시오 ...
마법사를 사용하여 열을 명시적으로 선택한 다음 해당 스크립트를 사용합니다.
You'll probably want the stack option too.You'll probably want the stack option too.스택 옵션도 원할 것입니다.
또한 조금 더 정확하기 때문에 행 생성기를 루트에서 항목으로 변경했습니다. 아마 실질적인 차이는 없을 것입니다.
행에 대해 선택된 항목으로 인해 해당 항목이 발생할 때마다 데이터 테이블에 새 행이 기록됩니다. 통계를 켜면 항목이 2번 반복되는 것을 볼 수 있습니다.