1
  aJsonObject* sBoard = aJson.createObject();
  aJsonObject* sensorType = aJson.createObject();

  aJsonObject* sBoard = aJson.createObject();
  aJsonObject* sensorType = aJson.createObject();

  aJson.addItemToObject(sBoard, "name", aJson.createItem("SensorBoardOne"));
  aJson.addItemToObject(sBoard, "Sensor", sensorType);

  aJson.addNumberToObject(sensorType, "ph", 5.33);
  aJson.addNumberToObject(sensorType, "ec", 880);
  aJson.addNumberToObject(sensorType, "temp", 74.68);

  aJsonObject* ph = aJson.getObjectItem(sensorType, "ph");

  Serial.println(ph->valuefloat);

Serial.println(ph->valuefloat);0.00 を返します。私は以前に C 構造体を扱ったことがなく、構文を正しくセットアップしたかどうかわかりません。私のjson構造はかなり単純に見えます。ただし、ph float 値に対して正しい creatObject() にアクセスしているかどうかはわかりません。phの適切な値を取得するにはどうすればよいですか?

aJSON ライブラリの詳細については、http://interactive-matter.eu/blog/2010/08/14/ajson-handle-json-with-arduino/ をご覧ください

新しいコードを編集:

  aJsonObject* sBoard = aJson.createObject();
  
  aJson.addItemToObject(sBoard, "name", aJson.createItem("SensorBoardOne"));
  
  aJson.addNumberToObject(sBoard, "ph", 5.33);
  aJson.addNumberToObject(sBoard, "ec", 880);
  aJson.addNumberToObject(sBoard, "temp", 74.68);
  
  aJsonObject* phValue = aJson.getObjectItem(sBoard, "ph");
  char* string = aJson.print(sBoard);
    if (string != NULL) {
      Serial.println(string); //prints out: {"name":"SensorBoardOne","ph":5.33000,"ec":880,"temp":74.68000}

    }

  Serial.println(phValue->valuefloat);

最終的に、json 構造をより単純な構造に変更しました。arduinoのRAMが不足しているため、別の下部構造は必要ないと感じました。json 構造を短縮した後、ph の valuefloat を正常に取得できました。今後の参考のために、以前の問題を解明することにまだ興味があります。

4

1 に答える 1

0

コードを試してみたところ、スニペットの冒頭で sBoard と sensorType の両方が 2 回宣言されていることがわかりました。

私はそれを削除し、適切な応答「5.33」を得ています。これは、編集後に使用しているコードです。

  aJsonObject* sBoard = aJson.createObject();
  aJsonObject* sensorType = aJson.createObject();

  aJson.addItemToObject(sBoard, "name", aJson.createItem("SensorBoardOne"));
  aJson.addItemToObject(sBoard, "Sensor", sensorType);

  aJson.addNumberToObject(sensorType, "ph", 5.33);
  aJson.addNumberToObject(sensorType, "ec", 880);
  aJson.addNumberToObject(sensorType, "temp", 74.68);

  aJsonObject* ph = aJson.getObjectItem(sensorType, "ph");

  Serial.println(ph->valuefloat);
于 2012-08-04T15:33:26.897 に答える