Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON对象作为JNI中的参数传递给CPP并检索JSON对象';CPP中的s数据 需要使用类对象输入java程序中的数据,将其转换成JSON对象,并通过JNI传递给C++。 在C++中, 必须从对象中检索数据并将其存储在文件中_C++_Json_Java Native Interface - Fatal编程技术网

将JSON对象作为JNI中的参数传递给CPP并检索JSON对象';CPP中的s数据 需要使用类对象输入java程序中的数据,将其转换成JSON对象,并通过JNI传递给C++。 在C++中, 必须从对象中检索数据并将其存储在文件中

将JSON对象作为JNI中的参数传递给CPP并检索JSON对象';CPP中的s数据 需要使用类对象输入java程序中的数据,将其转换成JSON对象,并通过JNI传递给C++。 在C++中, 必须从对象中检索数据并将其存储在文件中,c++,json,java-native-interface,C++,Json,Java Native Interface,我不知道如何发送和检索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);

我不知道如何发送和检索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。

假设您的意思是:

void Java\u sample\u callCPP(JNIEnv*env、jobject obj、jobject arg){
//这段代码调用arg->getInt(“val”),假设它是org.json.JSONObject
jclass cls=env->FindClass(“org/json/JSONObject”);//或者:env->GetObjectClass(arg);
jmethodID method=env->GetMethodID(cls,“getInt”,“(Ljava/lang/String;)I”);//int-getInt(java.lang.String键)
jint val=env->CallIntMethod(arg,method,env->NewStringUTF(“val”);
std::cout NewStringUTF(“strVal”);
//复制返回的Java字符串。我们还需要再次释放指针。
const jchar*ptr=env->GetStringUTFChars(strVal,nullptr);
std::字符串strVal_副本(ptr);
环境->释放StringUTFChars(标准、ptr);

很抱歉,这不是StackOverflow的工作方式。“我想做X,请给我提示和/或示例代码”表格中的问题请访问并阅读,特别是阅读问题的解决方案:JSON是一种数据交换格式!只需将您的数据结构展平为JSON字符串,将其跨JNI边界传递,并在另一端解析它。这正是我不应该做的!!我不能作为s字符串传递,我必须作为ob传递ject,从中检索数据并存储。@botje那么我不理解你的问题。请添加代码(最好是真实代码,但伪代码可以)这是我的问题,我不知道从哪里开始。告诉我JSON对象是否可以作为一个参数传递给C++。谢谢。但是我不能使用回调方法…因为我有一个长的属性。我不能每次都使用一个变量的方法。而且,JSONObject在这里使用什么?这些代码中的哪一行?ses是一种“回调方法”根据你的观点,为什么使用JNI方法来获取属性是个问题?这就是你所要问的问题。如果你不想这样,你需要在java端序列化你的对象,C++ C++上反序列化。然后你可以使用C++的C++方法来检查C++对象。抱歉,如果我在窃听。请告诉我怎么做!你问了什么?你问如何使用JNI检查java对象,我回答。没有其他方法可以从C++访问java对象。谢谢你。你已经得到了巨大的帮助。你所说的方法对我来说很好!谢谢。但是请你告诉我如何在那个取悦中检索一个字符串。
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;
}