안녕하세요,
일부 JSL을 사용하여 API 끝점에서 데이터를 검색하고 JMP의 데이터 테이블로 변환하는 추가 기능이 있습니다. 결과 데이터 테이블이 JSON 키를 알파벳순으로 정렬한다는 점을 제외하면 모든 것이 잘 작동합니다.
JSON 키가 순서가 지정되어 있지 않다는 것을 알고 있지만 데이터 테이블 열로 변환 할 때 원래의 순차적 순서를 유지할 수있는 방법이 있습니까?
감사,
앤디
request = New HTTP Request(
URL( "https://xyz.com/api" ),
Method( "Get" ),
Query String(
[["token" => "abcdefg"]]
)
);
json = request << Send();
jsl_json = Parse JSON( json );
dt = JSON To Data Table( As JSON Expr( jsl_json["items"], Guess("wide") ) );재정렬은 json 문자열을 연관 배열로 구문 분석 할 때 발생합니다. 그런 다음 "items"키 아래의 일부를 추출하고 다시 다른 json 문자열로 변환 한 다음이를 데이터 테이블로 변환합니다.
대부분을 건너 뛰고 JsonToDataTable () 대신 open ()을 통해 json 가져 오기 마법사를 사용하는 것이 좋습니다. 필요한 스크립트를 얻으려면 :
- savetextfile ( "$ temp / x.json", json) 및 json 마법사로 엽니 다 (파일-> 열기 대화 상자에서 json 필터 선택). 운이 좋으면 추측 값 중 하나를 선택할 수 있습니다. 그렇지 않은 경우 huge를 선택하고 stack 확인란을 선택하고 원하지 않는 열의 선택을 취소하고 "items"를 제외한 ROWS 아래의 모든 항목을 선택 취소합니다. 그것은 아마도 당신이 필요로하는 것에 매우 가깝습니다.
- 결과 테이블에서 소스 스크립트를 열고 복사하십시오. 필요에 따라 소스 스크립트에서 COLS를 재정렬 할 수 있습니다. 다음에 해당 스크립트를 사용하십시오. COLS의 초기 주문은 아마도 당신이 요구하는 것일 것입니다.
다음은 blob을 사용하여 임시 파일을 피하는 예입니다.
request = New HTTP Request( URL( "http://api.open-notify.org/iss-now.json" ), Method( "Get" ), Query String( [["token" => "abcdefg"]] ) );
jsontext = request << send; // not scrambled yet
jsonblob = Char To Blob( jsontext );
Open(jsonblob,
JSON Settings(
Stack( 0 ),
Row( "/root" ),
Col( "/root/timestamp", Column Name( "timestamp" ), Fill( "Use Once" ), Type( "Numeric" ), Format( {"Best"} ), Modeling Type( "Continuous" ) ),
Col( "/root/iss_position/longitude", Column Name( "longitude" ), Fill( "Use Once" ), Type( "Numeric" ), Format( {"Best"} ), Modeling Type( "Continuous" ) ),
Col( "/root/iss_position/latitude", Column Name( "latitude" ), Fill( "Use Once" ), Type( "Numeric" ), Format( {"Best"} ), Modeling Type( "Continuous" ) ),
Col( "/root/message", Column Name( "message" ), Fill( "Use Once" ), Type( "Character" ), Format( {"Best"} ), Modeling Type( "Continuous" ) )
),
jsonwizard( 0 )
);