2012-12-06 2 views
0

계피 애플릿에서 사용하고자하는 GSTVs에 a(ss) 유형의 GVariant로 저장된 배열이 있습니다. 다음 코드를 사용하여 값을 성공적으로 검색 할 수 있습니다.자바 스크립트에서 GVariant 압축을 풉니 다

let schema = schema_source.lookup(SCHEMA_NAME, false); 
let settings = new Gio.Settings({ settings_schema: schema }); 
let my_value = settings.get_value('myvalue'); 

하지만 압축을 풀 수 없습니다. 지금까지 볼 수 있듯이 GVariantIter 구조체를 사용하여 패키지를 압축해야하지만 문서가 제한되어 gjs API에서 올바른 인터페이스를 찾을 수 없습니다 (실제로 존재하는 경우). 아무도 그것을하는 방법을 알고 있습니까?

감사합니다.

편집 : 시간 나는 설정을 저장하기 위해 외부 JSON 파일을 사용하고있는 경우

<key type="a(ss)" name="myvalue"> 
    <default>[]</default> 
    <summary>an array of (string, string) tuples</summary> 
    <description></description> 
</key> 

를하지만 100 % 만족스러운 해결책이 아니다 : 내 스키마는 다음과 같습니다. 두 개의 as 유형 변수를 유지 관리 할 수 ​​있다고 가정하고 정렬을 유지하지만 올바르게 수행 할 수있는 방법이 있어야합니다.

답변

2

약간 늦지 만 my_value.unpack()은 정상적으로 작동합니다.

my_value.deep_unpack()은 배열과 요소를 반복적으로 언팩합니다.

+0

감사합니다 - 시간이 다가와서 다시 확인해 보겠습니다 :) – simon

+0

저에게 맞습니다! 이 정보를 어디서 발견했는지 물어봐도 될까요? [공식 문서] (https://developer.gnome.org/glib/stable/glib-GVariant.html)에서 나는'unpack()'이라는 메소드를 찾을 수 없습니다. – JayStrictor

0

설정 유형에 따라 문자열 배열을 저장/검색하고 싶습니까? | Read/Write : 내 확장에서 동일한 기술을 사용

<key name="myvalue" type="as"> 
    <default>[]</default> 
    <summary>Some array.</summary> 
    <description>An Array of strings.</description> 
</key> 

:

스키마에서
// Read the array (will create a real JS array): 
let string_array = settings.get_strv("myvalue"); 
// Now do something with it... 
// Store it: 
settings.set_strv("myvalue", string_array); 
Gio.Settings.sync(); // Important! 

,이 같은 항목을 포함 다음과 같습니다이 경우, Gio.Settings.get_strv(String key) 사용 쉬운 방법이있다 Schema

+0

답장을 보내 주셔서 감사합니다. 불행히도, 문자열의 _pairs_ 배열을 저장해야하기 때문에'a (ss)', 따라서 문제가 있습니다. 내 질문을 조금 업데이트했습니다. – simon

관련 문제