it-tools/src/tools/json-data-condenser/json-data-condenser.vue
2025-07-03 15:04:16 -07:00

62 lines
1.4 KiB
Vue

<script setup lang="ts">
import { ref } from 'vue';
import { condenseJsonStructures } from './json-data-condenser.service';
const rawJson = ref('');
const condensedJson = ref('');
const error = ref<string | null>(null);
function condense() {
error.value = null;
condensedJson.value = '';
try {
const parsed = JSON.parse(rawJson.value);
const condensed = condenseJsonStructures(parsed);
condensedJson.value = JSON.stringify(condensed, null, 2);
}
catch (err: any) {
error.value = 'Invalid JSON input. Please fix and try again.';
}
}
</script>
<template>
<c-card title="JSON Condenser" class="mx-auto max-w-4xl px-4">
<!-- Input -->
<div class="mb-2 font-semibold">
Original JSON Input
</div>
<c-input-text
v-model:value="rawJson"
placeholder="Paste a JSON payload here..."
class="mb-4"
rows="12"
multiline
raw-text
monospace
/>
<c-button @click="condense">
Condense JSON
</c-button>
<!-- Output Section -->
<div class="mt-10">
<div class="mb-2 font-semibold">
Condensed Output
</div>
<c-input-text
:value="condensedJson"
placeholder="Condensed JSON will appear here..."
rows="12"
readonly multiline monospace raw-text
/>
</div>
<!-- Error Display -->
<c-alert v-if="error" type="error" class="mt-4">
{{ error }}
</c-alert>
</c-card>
</template>