在 JNI 中将 JSON 对象作为参数传递给 CPP 并在 CPP 中检索 JSON 对象的数据

Pass JSON object as argument in JNI to CPP and retrieve JSON Objects's data in CPP

需要使用 class 对象从 java 程序输入数据,将其转换为 json 对象并通过 JNI 传递给 c++。 在 C++ 中, 必须从对象中检索数据并将其存储在文件中。

我不知道如何发送和检索 json 对象的数据。 帮我解决一些简单的代码片段!!

class sample
{  

    public native void callCPP(JSONObject jo);    
    public static void main(String args[])
    {  
        int val = 7;  
        JSONObject jo = new JSONObject;  
        jo.put("val",val);

        sample s = new sample();
        s.callCPP(jo);  
    }  
}

反之亦然(将数据作为 JSONObject 从 cpp 发送到 java。

假设你的意思是 org.json.JSONObject:

void Java_sample_callCPP(JNIEnv *env, jobject obj, jobject arg) {
    // This code calls arg->getInt("val"), assuming it is a org.json.JSONObject
    jclass cls = env->FindClass("org/json/JSONObject"); // alternatively: env->GetObjectClass(arg);
    jmethodID method = env->GetMethodID(cls, "getInt", "(Ljava/lang/String;)I"); // int getInt(java.lang.String key)
    jint val = env->CallIntMethod(arg, method, env->NewStringUTF("val"));
    std::cout << "val: " << val << std::endl;

    jmethodId method2 = env->GetMethodID(cls, "getString", "(Ljava/lang/String;)Ljava/lang/String;");
    jstring strVal = (jstring) env->CallObjectMethod(arg, method2, env->NewStringUTF("strVal"));

    // Make a copy of the returned Java string. We need to release the pointer again, too.
    const jchar *ptr = env->GetStringUTFChars(strVal, nullptr);
    std::string strVal_copy(ptr);
    env->ReleaseStringUTFChars(strVal, ptr);
    std::cout << "strVal: " << strVal_copy << std::endl;
}