File: ofxJSONElement.cpp

package info (click to toggle)
bespokesynth 1.3.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,716 kB
  • sloc: cpp: 117,136; ansic: 18,752; python: 593; xml: 74; makefile: 4
file content (119 lines) | stat: -rw-r--r-- 2,610 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
 *  ofxJSONFile.cpp
 *  asift
 *
 *  Created by Jeffrey Crouse on 12/17/10.
 *  Copyright 2010 Eyebeam. All rights reserved.
 *
 */

#include "ofxJSONElement.h"
#include "SynthGlobals.h"

#include <json/reader.h>
#include <json/writer.h>

#include "juce_core/juce_core.h"

using namespace Json;


//--------------------------------------------------------------
ofxJSONElement::ofxJSONElement(const Json::Value& v)
: Value(v)
{
}


//--------------------------------------------------------------
ofxJSONElement::ofxJSONElement(std::string jsonString)
{
   parse(jsonString);
}


//--------------------------------------------------------------
bool ofxJSONElement::parse(std::string jsonString)
{
   CharReaderBuilder rb;
   auto reader = std::unique_ptr<Json::CharReader>(rb.newCharReader());
   Json::String errors;
   if (!reader->parse(jsonString.c_str(),
                      jsonString.c_str() + jsonString.size(),
                      this, &errors))
   {
      ofLog() << "Unable to parse string: " << errors;
      return false;
   }
   return true;
}


//--------------------------------------------------------------
bool ofxJSONElement::open(std::string filename)
{
   juce::File file(filename);

   if (file.exists())
   {
      juce::String str = file.loadFileAsString();

      CharReaderBuilder builder;
      auto reader = std::unique_ptr<CharReader>(builder.newCharReader());
      auto mS = str.toStdString();

      if (!reader->parse(mS.c_str(), mS.c_str() + mS.size(), this, nullptr))
      {
         ofLog() << "Unable to parse " + filename;
         return false;
      }
   }
   else
   {
      ofLog() << "Could not load file " + filename;
      return false;
   }

   return true;
}


//--------------------------------------------------------------
bool ofxJSONElement::save(std::string filename, bool pretty)
{
   filename = ofToDataPath(filename);
   juce::File file(filename);
   file.create();
   if (!file.exists())
   {
      ofLog() << "Unable to create " + filename;
      return false;
   }

   Json::StreamWriterBuilder builder;

   if (pretty)
   {
      builder["indentation"] = "   ";
   }
   const std::string json_file = Json::writeString(builder, *this);
   file.replaceWithText(json_file);

   ofLog() << "JSON saved to " + filename;
   return true;
}


//--------------------------------------------------------------
std::string ofxJSONElement::getRawString(bool pretty)
{
   std::string raw;
   Json::StreamWriterBuilder builder;

   if (pretty)
   {
      builder["indentation"] = "   ";
   }
   raw = Json::writeString(builder, *this);
   return raw;
}