我正在尝试为我的数据编写自己的json解析器。单个条目在剪切时如下所示
`"ID":"612","path":"letter_2013-12-16 17:49:43 0000.png","longitude":"24.9767","latitude":"60.2099","letter":"K"`
现在我试图将这些放入另一个向量中,在那里我剪掉了所需的单个数据。由于我没有找到从 c++ 中的字符串中删除" 的方法(欢迎建议),因此我将按以下步骤进行:
individualEntries=ofSplitString(fullResponse, "},{");
for(int i=0; i<individualEntries.size(); i++){
printf("entry %s n",individualEntries[i].c_str());
vector<string> cutEntries =ofSplitString(individualEntries[i], ",");
for(int j=0; j<cutEntries.size(); j++){
//delete "ID":"
cutEntries[0].erase (0, 6);
//delete "
cutEntries[0]=cutEntries[0].substr(0,cutEntries[0].length()-1);
//delete "path":"
cutEntries[1].erase(0,4);
cutEntries[1]=cutEntries[1].substr(0,cutEntries[1].length()-1);
//cutEntries[1].append("g");
printf("%s ",cutEntries[j].c_str());
}
printf("n");
}
它导致:
1159 letter_2014-01-19 12:59:05 0000.pn "longitude":"25.0903" "latitude":"60.1956" "letter":"I"
它在第一部分工作正常,我很好地剪掉了我的 ID,但是当试图剪掉"路径":"时,它开始表现得很奇怪。长度应该是长度为 8,但切掉 4 可以达到正确的目标。当执行子字符串以删除最后一个字母时,它会删除最后 2 个字母。奇怪的是,第一个条目(cutEntries[0])不会发生同样的情况,而只会发生在第二个条目(cutEntryries[1])上。有什么想法吗?
此循环
for(int j=0; j<cutEntries.size(); j++){
//delete "ID":"
cutEntries[0].erase (0, 6);
//delete "
cutEntries[0]=cutEntries[0].substr(0,cutEntries[0].length()-1);
//delete "path":"
cutEntries[1].erase(0,4);
cutEntries[1]=cutEntries[1].substr(0,cutEntries[1].length()-1);
//cutEntries[1].append("g");
printf("%s ",cutEntries[j].c_str());
}
没有意义,因为你至少cutEntries.size()时间正在做
cutEntries[0].erase (0, 6);
//delete "
cutEntries[0]=cutEntries[0].substr(0,cutEntries[0].length()-1);
此操作应在循环外部完成,或者您可以编写例如
if ( j == 0 )
{
cutEntries[j].erase (0, 6);
//delete "
cutEntries[j]=cutEntries[j].substr(0,cutEntries[j].length()-1);
}
但无论如何,这是一个糟糕的设计。
这实现了目标:
fullResponse=ofToString(response.data);
//printf("urlResponse %s n",fullResponse.c_str());
ofStringReplace(fullResponse, "[{", "");
ofStringReplace(fullResponse, "}]", "");
individualEntries=ofSplitString(fullResponse, "},{");
for(int i=0; i<individualEntries.size(); i++){
printf("entry %s n",individualEntries[i].c_str());
vector<string> cutEntries =ofSplitString(individualEntries[i], ",");
//delete the first parts in all of them
ofStringReplace(cutEntries[0], ""ID":"", "");
ofStringReplace(cutEntries[1], ""path":"", "");
ofStringReplace(cutEntries[2], ""longitude":"", "");
ofStringReplace(cutEntries[3], ""latitude":"", "");
ofStringReplace(cutEntries[4], ""letter":"", "");
//delete the last " in all of them
ofStringReplace(cutEntries[0], """, "");
ofStringReplace(cutEntries[1], """, "");
ofStringReplace(cutEntries[2], """, "");
ofStringReplace(cutEntries[3], """, "");
ofStringReplace(cutEntries[4], """, "");
for(int j=0; j<cutEntries.size(); j++){
printf("%s ",cutEntries[j].c_str());
}
printf("n");
}