Multinode with RF24Network.h

I'm doing with RF24network with gather temp, humid, soil. i have succeeded with 1master (layer 0) -- 2 node (layer1). I'm gonna do 1 master (layer 0) -- node01 (layer1) -- node 011, node 021, node 031,...(layer 3). Node01 will gather value from 3 node011,021,031 then send to master (write(node011); write(node021); write(node031)) so it's write 3 times??? or can i combine 3 packages to 1 then write 1 times. My question is how can my masternode receive 3 pack and identified which one is from node011, 021, 031 ? and if i combine 3 pakages then write 1 times, how to separate that package into 3 piece. Someone has adviced me to use JSON string to trasmid. i havent used JSON before, is it possible? are there any ways to optimize my RX code. thank you. Sorry for my bad english. Here is my RX code, TX isnt different much.

struct package0
  {
    float temperature = 0;
    float humidity = 0;
    int soil = 0;
  };
  typedef struct package0 Package0;
  Package0 pack0;
/*******************************************/
  struct package1
  {
    float temperature = 0;
    float humidity = 0;
    int soil = 0;
  };
  typedef struct package1 Package1;
  Package1 pack1;
/******************RF24******************/
  RF24 radio(25,26);
  RF24Network network(radio);
  const uint16_t this_node = 00; //Octal format
  const uint16_t node01 = 01;
  const uint16_t node02 = 02;
/****************************************/
void loop() 
{
  // put your main code here, to run repeatedly:
  network.update();
  if(network.available())
  {
    RF24NetworkHeader header;
    /********************Test address
    network.read(header, &pack0, sizeof(pack0));
    Serial.println("******");  
    Serial.println(header.from_node);
    Serial.println(network.peek(header));
    delay(1000);*********************/
    
    network.read(header, &pack0, sizeof(pack0));
    if (header.from_node == 1)
    {
      Serial.print("From node0");
      Serial.println(header.from_node);
      Serial.print(pack0.temperature);
      Serial.println("C");
      Serial.print(pack0.humidity);
      Serial.println("%");
      Serial.print(pack0.soil);
      Serial.println("%");
    }
    else if (header.from_node == 2) //if received from node 2, storage pack to pack1
    { 
      pack1.temperature = pack0.temperature;
      pack1.humidity = pack0.humidity;
      pack1.soil= pack0.soil;
    }

My TX Code

struct package0
{
  float temperature = 0;
  float humidity = 0;
  int soil = 0;
};
typedef struct package0 Package0;
Package0 pack0;
/**********************************/
/**************RF24****************/
RF24 radio(25,26);
RF24Network network(radio);
const uint16_t this_node = 01;
const uint16_t master00 = 00;
/**********************************/
void setup() {
pinMode(SOILPIN, INPUT);
Serial.begin(9600);
dht.begin();
radio.begin();
network.begin(90, this_node);
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_250KBPS);
}
void loop() {
  // put your main code here, to run repeatedly:
  network.update();
  readdht();
  Serial.println(pack0.humidity);
  Serial.println(pack0.temperature);
  Serial.println(pack0.soil);
}

void readdht()
{
  delay(2000);
  pack0.humidity = dht.readHumidity();
  pack0.temperature = dht.readTemperature();
  pack0.soil = map(analogRead(SOILPIN), 0, 4096, 100, 0);//convert to percentage
  if (isnan(pack0.humidity) || isnan(pack0.temperature))
  {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }
  RF24NetworkHeader header(master00);
  bool ok = network.write(header, &pack0, sizeof(pack0));
  temperature_old = pack0.temperature;
  humidity_old = pack0.humidity;
  soil_old = pack0.soil;
}

Why not have an extra byte in the message that identifies the creator?

...R