【问题标题】:How to clean a json object created by "json_object_new_string"?如何清理由“json_object_new_string”创建的 json 对象?
【发布时间】:2013-08-22 14:10:14
【问题描述】:

我有以下代码,我想清理由json_object_new_string() 创建的 json 对象。

#include <json/json.h>
#include <stdio.h>

int main() {
  /*Creating a json object*/
  json_object * jobj = json_object_new_object();

  /*Creating a json string*/
  json_object *jstring = json_object_new_string("Joys of Programming");


  /*Form the json object*/
  json_object_object_add(jobj,"Site Name", jstring);

  /*Now printing the json object*/
  printf ("The json object created: %sn",json_object_to_json_string(jobj));

  /* clean the json object */
  json_object_put(jobj);

}

json_object_put(jobj); 行是否同时清除 jobjjstring

或者我必须与json_object_put(jstring); 单独清理jstring

编辑

问题2

如果jstring 以这种方式被创建到一个函数中会有什么行为?

#include <json/json.h>
#include <stdio.h>

static void my_json_add_obj(json_object *jobj, char *name, char *val) {
      /*Creating a json string*/
      json_object *jstring = json_object_new_string(val);


      /*Form the json object*/
      json_object_object_add(jobj,name, jstring);
}

int main() {
  /*Creating a json object*/
  json_object * jobj = json_object_new_object();

  my_json_add_obj(jobj, "Site Name", "Joys of Programming")

  /*Now printing the json object*/
  printf ("The json object created: %sn",json_object_to_json_string(jobj));

  /* clean the json object */
  json_object_put(jobj);

}

jstring 在这种情况下是一个局部变量到一个函数中。 json_object_put(jobj); 是否会清理jstring(在函数my_json_add_obj() 中创建)?

【问题讨论】:

    标签: c json json-c


    【解决方案1】:

    json_object_put 将释放对象引用的所有内容。所以是的,在jobj 上使用该函数来释放整个对象就足够了。

    【讨论】:

    • 如果jstring 被创建到一个函数中,会有什么行为?请参考我编辑的问题
    • 请停止这样做。在有人发布答案后完全更改问题是不可接受的 Stack Overflow 行为。无论如何,你在哪里做并不重要。只要字符串是对象的一部分,它就会被释放。
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 2014-11-06
    • 2019-12-01
    相关资源
    最近更新 更多