Sprintf function malformed?

I am trying to create a MQTT message with Sprintf, but I am not seeing any value for Level when it prints to the serial monitor. Am I doing something wrong with the data types?

char JSON_buf[100];
char float_buf[5];
String level = "high";

float volume = resistanceToVolume(resistance, ZERO_VOLUME_RESISTANCE, CALIBRATION_RESISTANCE, CALIBRATION_VOLUME);
Serial.print("Calculated volume: ");
Serial.println(volume, 5);
if (volume < 2000){
level = "Low";
Serial.print("Level: ");
Serial.println(level);
}

dtostrf(volume, 4, 1, float_buf);
float_buf[4] = '\0';
sprintf(JSON_buf, "{"state":{"reported":{"Volume":%s:{"Level":%s}}}}", float_buf, level);
print_log("shadow update", myClient.shadow_update(AWS_IOT_MY_THING_NAME, JSON_buf, strlen(JSON_buf), NULL, 5));
Serial.println(JSON_buf);

Please use code tags when posting code.

Strings

String level = "high";

are to be avoided on Arduino, and do not work with sprintf().

The "%s" format specifier is used with C-strings, or zero terminated character arrays.

"%s"

Thanks to both of you for your help. Where can I find a list of all the Arduino format specifiers for sprintf()?

https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__avr__stdio_1gaa3b98c0d17b35642c0f3e4649092b9f1.html

stevealbright:
Thanks to both of you for your help. Where can I find a list of all the Arduino format specifiers for sprintf()?

the " are for json, not for printf.

printf is 50 years old. google "C printf"