我想解析json文件并将其存储在C ++类中。我需要帮助了解实现这一目标的最佳方法是什么?
test.json
{
"vehicles": [
{
"type" : "car" :
{
"car1" :
{
"name" : "merc-cla250",
"color" : "black",
},
"car2" :
{
"name" : "toyota-prius",
"color" : "blue",
},
}
},
{
"type" : "bike" :
{
"bike1" :
{
"name" : "windsor",
"color : "black",
},
"bike2" :
{
"name" : "diamond",
"color : "black",
},
}
}
]
}
我想将这些信息存储在C ++的类中。在C中,我会定义一些结构并存储信息。我正在学习C ++。首先,我只是想设计头文件。我试过跟踪的事情。有人可以帮我改进吗?我知道,我写的是C风格,但我很感激有人可以帮我写出更好的C ++方式。有一次,我会写头文件,我将开始编写cpp文件。提前致谢!感谢您的时间和帮助!
vehicle_json.h
#ifndef __VEHICLE_H__
#define __VEHICLE_H__
#include <iostream>
#include <cstdlib>
class vehicle
{
public:
const std::string& getType(void);
private:
std::string type;
carList& carsInfo; // Can I do this?
bikeList& bikesInfo;
};
class car
{
public:
const std::string& getName(void);
const std::string& getType(void);
private:
std::string name;
std::string color;
};
typedef std::vector<car> carList;
class bike
{
public:
const std::string& getName(void);
const std::string& getType(void);
private:
std::string name;
std::string color;
};
typedef std::vector<bike> bikeList;
#endif // __VEHICLE_H__
答案 0 :(得分:0)
嗯,在相当正式的层面上有一些错误:
using namespace std;
会强制所有std
加入任何人,包括该头文件,也不要这样做。然后你继续在任何地方使用std::
,这是矛盾的。但是,请放弃using ..
,但保留std::
!void
。在C中,需要明确说明。car
不是vehicle
吗?我认为它应该是一个基础类。some_car.getCarName()
- 为什么要在函数名中重复这个类?我会改用some_car.getName()
。实际上,请设置some_vehicle.getName()
,它符合上面建议的基类。现在,关于你的JSON问题:这里没有什么需要JSON!更重要的是,如果您的类不依赖于任何特定的JSON表示,则更可取。相反,请考虑一个简单的函数:parse_vehicle_json(std::istream& in)
。在该函数内部,读取并解析输入为JSON,然后从中提取车辆列表。请注意,C ++容器不是多态的,因此您无法在car
中存储vector<vehicle>
,而是必须使用(优选“智能”)指针进行动态分配。