| 596 | } |
| 597 | |
| 598 | private static void writeValue(StringBuilder sb, Object value) { |
| 599 | if (value == null) { |
| 600 | sb.append("null"); |
| 601 | } else if (value instanceof String s) { |
| 602 | writeString(sb, s); |
| 603 | } else if (value instanceof Number || value instanceof Boolean) { |
| 604 | sb.append(value.toString()); |
| 605 | } else if (value instanceof Map<?, ?> map) { |
| 606 | sb.append('{'); |
| 607 | boolean first = true; |
| 608 | for (Map.Entry<?, ?> entry : map.entrySet()) { |
| 609 | Object key = entry.getKey(); |
| 610 | if (!(key instanceof String sKey)) { |
| 611 | continue; |
| 612 | } |
| 613 | if (!first) { |
| 614 | sb.append(','); |
| 615 | } |
| 616 | first = false; |
| 617 | writeString(sb, sKey); |
| 618 | sb.append(':'); |
| 619 | writeValue(sb, entry.getValue()); |
| 620 | } |
| 621 | sb.append('}'); |
| 622 | } else if (value instanceof List<?> list) { |
| 623 | sb.append('['); |
| 624 | boolean first = true; |
| 625 | for (Object item : list) { |
| 626 | if (!first) { |
| 627 | sb.append(','); |
| 628 | } |
| 629 | first = false; |
| 630 | writeValue(sb, item); |
| 631 | } |
| 632 | sb.append(']'); |
| 633 | } else { |
| 634 | writeString(sb, value.toString()); |
| 635 | } |
| 636 | } |
| 637 | |
| 638 | private static void writeString(StringBuilder sb, String value) { |
| 639 | sb.append('"'); |