1# 使用JSVM-API接口进行JSON操作 2 3## 简介 4 5使用JSVM-API接口对JSON数据操作时,相关接口可以在JSVM模块中直接操作和处理JSON格式的数据。 6 7## 基本概念 8 9- **JSON( JavaScript Object Notation)**:是一种常见的数据交换格式,可用于实现前后端之间的数据传递、存储和交流,并且可以与多种编程语言进行交互,在JavaScript中被广泛应用于数据处理。 10 11## 接口说明 12 13| 接口 | 功能说明 | 14|----------------------------|--------------------------------| 15| OH_JSVM_JsonParse | 解析JSON字符串,并将结果存储在JSON对象。 | 16| OH_JSVM_JsonStringify | 将对象字符串化,并将结果存储在JSVM字符串对象。 | 17 18## 使用示例 19 20JSVM-API接口开发流程参考[使用JSVM-API实现JS与C/C++语言交互开发流程](use-jsvm-process.md),本文仅对接口对应C++相关代码进行展示。 21 22### OH_JSVM_JsonParse && OH_JSVM_JsonStringify 23 24对JSON对象进行解析操作,并输出解析结果的有效值。 25 26cpp部分代码 27 28```cpp 29// hello.cpp 30#include <string> 31 32// 待执行的js代码 33static const char *STR_TASK = R"JS(jsonParseNumber();jsonParseObject();)JS"; 34 35// 解析JSON数字 36static JSVM_Value JsonParseNumber(JSVM_Env env, JSVM_CallbackInfo info) 37{ 38 // 设置要解析的JSON数字 39 std::string strNumber = "10.555"; 40 JSVM_Value jsonString; 41 JSVM_CALL(OH_JSVM_CreateStringUtf8(env, strNumber.c_str(), strNumber.size(), &jsonString)); 42 JSVM_Value jsonObject; 43 // 调用OH_JSVM_JsonParse函数解析JSON数字,并将结果存储在JSON对象中 44 JSVM_CALL(OH_JSVM_JsonParse(env, jsonString, &jsonObject)); 45 double number; 46 JSVM_CALL(OH_JSVM_GetValueDouble(env, jsonObject, &number)); 47 OH_LOG_INFO(LOG_APP, "Test JSVM jsonParseNumber: %{public}f", number); 48 return nullptr; 49} 50 51// 解析JSON字符串中的对象 52static JSVM_Value JsonParseObject(JSVM_Env env, JSVM_CallbackInfo info) 53{ 54 // 设置要解析的JSON对象字符串 55 std::string strObject = "{\"first\": \"one\", \"second\": \"two\", \"third\": \"three\"}"; 56 JSVM_Value strJson; 57 JSVM_CALL(OH_JSVM_CreateStringUtf8(env, strObject.c_str(), strObject.size(), &strJson)); 58 JSVM_Value jsonObject; 59 // 调用OH_JSVM_JsonParse函数解析JSON对象字符串,并将结果存储在JSON对象中 60 JSVM_CALL(OH_JSVM_JsonParse(env, strJson, &jsonObject)); 61 JSVM_Value jsonString; 62 // 调用OH_JSVM_JsonStringify函数将对象转换为字符串格式,并将结果存储在JSVM字符串对象中 63 JSVM_CALL(OH_JSVM_JsonStringify(env, jsonObject, &jsonString)); 64 size_t totalLen = 0; 65 JSVM_CALL(OH_JSVM_GetValueStringUtf8(env, jsonString, nullptr, 0, &totalLen)); 66 size_t needLen = totalLen + 1; 67 char* buff = new char[needLen]; 68 JSVM_CALL(OH_JSVM_GetValueStringUtf8(env, jsonString, buff, needLen, &totalLen)); 69 OH_LOG_INFO(LOG_APP, "Test JSVM jsonParseNumber: %{public}s", buff); 70 delete[] buff; 71 return nullptr; 72} 73 74// JsonParse注册回调 75static JSVM_CallbackStruct param[] = { 76 {.data = nullptr, .callback = JsonParseNumber}, 77 {.data = nullptr, .callback = JsonParseObject}, 78}; 79 80static JSVM_CallbackStruct *method = param; 81 82JSVM_PropertyDescriptor descriptor[] = { 83 {"jsonParseNumber", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT}, 84 {"jsonParseObject", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT}, 85}; 86 87``` 88 89## 预期结果 90 91Test JSVM jsonParseNumber: 10.555000 92 93Test JSVM jsonParseNumber: {"first":"one","second":"two","third":"three"} 94 95