Skip to content

Commit

Permalink
JSON layout shouldn't fail to render nullable strings (#232)
Browse files Browse the repository at this point in the history
  • Loading branch information
nehaev committed Jul 2, 2024
1 parent 4bef8bc commit c7e4f84
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,21 @@ public final void writeAsciiString(final String value) {
position += len;
}

/**
* Optimized method for writing 'null' into the JSON.
*/
public final void writeNull() {
if ((position + 4) >= buffer.length) {
enlargeOrFlush(position, 0);
}
final int s = position;
final byte[] _result = buffer;
_result[s] = 'n';
_result[s + 1] = 'u';
_result[s + 2] = 'l';
_result[s + 3] = 'l';
position += 4;
}

/**
* Content of buffer can be copied to another array of appropriate size.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,13 @@ public void writeFieldSeparator() {
public void writeStringField(String fieldName, String value) {
raw.writeAsciiString(fieldName);
raw.writeByte(SEMI);
raw.writeString(value);
if (value != null)
raw.writeString(value);
else
raw.writeNull();
}

public void writeNumberField(String fieldName, Long value) {
public void writeNumberField(String fieldName, long value) {
raw.writeAsciiString(fieldName);
raw.writeByte(SEMI);
NumberConverter.serialize(value, raw);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.github.loki4j.logback.json;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class JsonEventWriterTest {

@Test
public void testWriteMultipleFields() {
var writer = new JsonEventWriter(10);
writer.writeBeginObject();
writer.writeStringField("str", "abc");
writer.writeFieldSeparator();
writer.writeNumberField("num", 123);
writer.writeEndObject();

assertEquals("{\"str\":\"abc\",\"num\":123}", writer.toString());
}

@Test
public void testWriteNullString() {
var writer = new JsonEventWriter(10);
writer.writeBeginObject();
writer.writeStringField("str", null);
writer.writeEndObject();

assertEquals("{\"str\":null}", writer.toString());
}
}

0 comments on commit c7e4f84

Please sign in to comment.