使用 jsonCpp 库从 C++ 中的文件解析 json 时出错

Error While Parsing json from a file in C++ using jsonCpp Library

我有一个 JSON 文件之类的东西

[{ 
 "movie_id": 1, 
 "rating": "9.3", 
 "votes": "1,318,626", 
 "description": "Two imprisoned men bond over a number ....", 
 "title": "The Shawshank Redemption", 
 "poster": "", 
 "release_date": "14 October 1994", 
 "metascore": "80", 
 "director": "Frank Darabont", 
 "storyline": "Andy Dufresne is a young and successful ...",
 "stars": [ "Tim Robbins", "Morgan Freeman", "Bob Gunton" ], 
 "year": "1994", 
 "genre": [ "Crime", "Drama" ], 
 "gallery": [ "unknown1394846836._CB379391227_.png", ], 
 "running_time": "142min"
 },
 {...},
 {...},...]

我想使用 jsonCpp 库解析上述文件 input.json 中的数据,这是我的代码

#include <bits/stdc++.h>
#include "json/json.h"
using namespace std;
int main(){
   Json::Value root;
   Json::Reader reader;

   ifstream file("input.json");
   file >> root;

   string title = root[0]["title"].asString();
   cout<<title;
   return 0;
}

我使用 amalgamate.py 生成 jsoncpp.cpp 和 json.h 文件,当我 运行 使用命令 jsoncpp.cpp 这段代码(jsoncpp.cpp)时 g++ jsoncpp.cpp 我收到以下错误

/tmp/ccx18K5p.o: In function `main':
jsoncpp.cpp:(.text+0x19): undefined referen to Json::Value::Value(Json::ValueType)'
jsoncpp.cpp:(.text+0x28): undefined reference to `Json::Reader::Reader()'
jsoncpp.cpp:(.text+0x57): undefined reference to `Json::operator>>   (std::istream&, Json::Value&)'
jsoncpp.cpp:(.text+0x68): undefined reference to `Json::Value::operator[] (int)'
jsoncpp.cpp:(.text+0x75): undefined reference to  `Json::Value::operator[](char const*)'
jsoncpp.cpp:(.text+0x8a): undefined reference to `Json::Value::asString[abi:cxx11]() const'
jsoncpp.cpp:(.text+0xdc): undefined reference to `Json::Value::~Value()'
jsoncpp.cpp:(.text+0x12b): undefined reference to `Json::Value::~Value()'
collect2: error: ld returned 1 exit status

这可能是什么问题,如何解决?

在此先感谢

终于解决了!!我正在写我的问题的答案以帮助其他人 我没有正确 linked 库所以它告诉我 error.You 可以 link 在 c++ 中以这种方式使用任何外部库。

  1. 我的当前目录中有两个文件 json/json.hjsoncpp.cpp
  2. 创建一个新文件main.cpp并写下您使用该库的代码
  3. 不要编辑 jsoncpp.cpp
  4. 包含 json.h 文件和 jsoncpp.cpp,如下面更新的代码所示。
  5. 然后 运行 g++ main.cpp

    #include <bits/stdc++.h>
    #include "json/json.h"
    #include "jsoncpp.cpp"
    using namespace std;
    int main(){
        Json::Value root;
        Json::Reader reader;
    
        ifstream file("input.json");
        file >> root;
    
        string title = root[0]["title"].asString();
        cout<<title<<"\n";
        return 0;
    }
    

    运行 g++ main.cpp 之后的输出:

    The Shawshank Redemption